Via Cà Matta 2 - Peschiera Borromeo (MI)
+39 02 00704272
info@synaptica.info

AsyncWebServiceHandler

Digital Innovation Partner

AsyncWebServiceHandler

L’immagine mostra le differenze tra una pagina Asp.Net Sincrona e Asincrona;
Syncronous Page vs Asyncronous Page
Per modificare il comportamento di un Webservice .Net in modo simile ad una pagina Asp.Net asincrona (quelle con <%@ Page Async=”true” … %> ) è sufficente modificare l’HttpHandler dell’applicazione web come segue:
Aprire il  Web.config e nel tag <httpHandlers> di <system.web> commentare l’attuale Handler come segue:
<!-- <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> -->
A questo punto aggiungere il nuovo handler la cui dll dovrà  essere presente nella vostra /bin
<add verb="*" path="*.asmx" type="AsyncWebServiceHandler.AsyncWebServiceHandler, AsyncWebServiceHandler" />
Operazione conclusa.
Sorgenti della DLL (AsyncWebServiceHandler.cs)
namespace AsyncWebServiceHandler
{yncWebServiceHandler.AsyncWebServiceHandler, AsyncWebServiceHandler" />

	using System;
	using System.Web;
	using System.Web.SessionState;
	using System.Web.Services.Protocols; 

	public class AsyncWebServiceHandler :
	    System.Web.UI.Page, IHttpAsyncHandler, IRequiresSessionState
	{
	    protected override void OnInit(EventArgs e)
	    {
		AsyncMode=true;
	        IHttpHandler handler =
	            new WebServiceHandlerFactory ().GetHandler(
	                this.Context,
	                this.Context.Request.HttpMethod,
	                this.Context.Request.FilePath,
	                this.Context.Request.PhysicalPath);
	        handler.ProcessRequest(this.Context);
	        this.Context.ApplicationInstance.CompleteRequest();
	    } 

	    public IAsyncResult BeginProcessRequest(
	        HttpContext context, AsyncCallback cb, object extraData)
	    {
	        return this.AsyncPageBeginProcessRequest(
	            context, cb, extraData);
	    } 

	    public void EndProcessRequest(IAsyncResult result)
	    {
	        this.AsyncPageEndProcessRequest(result);
	    } 

	}
}

Lascia un commento