2011-05-20 4 views
2

J'essaye de configurer un HttpHandler asynchrone, mais je n'ai aucune idée si je suis sur la bonne voie. Il ne semble pas y avoir beaucoup de documentation à ce sujet. Je voudrais juste obtenir la demande de déclencher la méthode DoWork() async.Comment installer un IHttpAsyncHandler?

Quelques choses que je ne suis pas sûr:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.IO; 
using System.Text; 



public class WebServiceHandlerAsync : IHttpAsyncHandler 
{ 

    /// <summary> 
    /// BeingProcessRequest 
    /// </summary> 
    public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) 
    { 
     context.Response.Output.WriteLine("Starting"); 
     context.Response.Flush(); 

     // Invokes the BeginProcessRequest method on the asynchronous HTTP handler 
     RequestResult result = new RequestResult(context, null, extraData); 
     result.DoWork(); 

     return result; 
    } 

    /// <summary> 
    /// Do on end of request (blocking) 
    /// </summary> 
    public void EndProcessRequest(IAsyncResult result) 
    { 

    } 


    public bool IsReusable 
    { 
     get { return true; } 
    } 


    public void ProcessRequest(HttpContext context) 
    { 
     throw new NotImplementedException(); 
    } 

} 





/// <summary> 
/// Async object 
/// </summary> 
public class RequestResult : IAsyncResult 
{ 
    public HttpContext Context { get; private set; } 
    private bool _completed; 
    private object _extraData; 

    public object AsyncState 
    { 
     get { return _extraData; } 
    } 

    public System.Threading.WaitHandle AsyncWaitHandle 
    { 
     get { throw new NotImplementedException(); } 
    } 

    public bool CompletedSynchronously 
    { 
     get { return false; } 
    } 

    public bool IsCompleted 
    { 
     get { return _completed; } 
    } 


    /// <summary> 
    /// Constructor 
    /// </summary> 
    public RequestResult(HttpContext context, AsyncCallback callback, object extraData) 
    { 
     Context = context; 
     _extraData = extraData; 
    } 


    /// <summary> 
    /// Handle request 
    /// </summary> 
    public void DoWork() 
    {  
     // do some work 
     Context.Response.Output.WriteLine("Working..."); 
     _completed = true; 
    } 
} 

Répondre

0

Go et le show 188 sur dnrtv http://www.dnrtv.com/default.aspx?showNum=188

Cela vous guidera à travers l'état de l'asynchronisme d'art dans .NET 4 et la prochaine fonctionnalités dans la prochaine version .NET.

Vous aurez également la possibilité de le faire sur le ctp Asynch, qui est autorisé pour un usage commercial.

Cela fait de l'asynchronie une expérience de travail.

Questions connexes