簡體   English   中英

如何使用IIS下的HTTP處理程序處理長時間運行的請求?

[英]How to process long running requests with an HTTP handler under IIS?

我需要在IIS中處理長時間運行的請求,處理請求本身非常輕量級,但主要是由於IO需要花費大量時間。 基本上我需要查詢另一台服務器,有時會查詢第三台服​​務器。 所以我想同時處理盡可能多的請求。 為此,我需要異步處理請求如何正確處理?

使用Socket類我可以輕松地寫出類似的東西:

// ..listening code
// ..Accepting code

void CalledOnRecive(Request request)
{
    //process the request  a little
    Context context = new Context()
    context.Socket  = request.Socket;
    remoteServer.Begin_LongRunningDemonicMethod(request.someParameter, DoneCallBack, context);
}

void DoneCallBack( )
{
    IAsyncresult result = remoteServer.Begin_CallSomeVeryLongRunningDemonicMethod( request.someParameter, DoneCallBack, context);

    Socket socket = result.Context.Socket;
    socket.Send(result.Result);
}

在上面的例子中,一旦我調用“Begin ...”方法就釋放線程,並且響應在另一個線程上發送,因此您可以輕松實現非常高的並發性。 你如何在IIS內的HTTP處理程序中做同樣的事情?

你可以實現與一個HttpHandler IHttpAsyncHandler MSDN有一個很好的演練,其中有關於如何在此處執行操作的示例。

從這樣的事情開始:

public class Handler : IHttpAsyncHandler {
    public void ProcessRequest(HttpContext context)
    {
    }

    public IAsyncResult BeginProcessRequest(HttpContext context,
            AsyncCallback cb, object extraData)
    {
        IAsyncResult ar = BeginYourLongAsyncProcessHere(cb);
        return ar;
    }

    public void EndProcessRequest(IAsyncResult ar)
    {
        Object result = EndYourLongAsyncProcessHere(ar);
    }

    public bool IsReusable { get { return false; } }
}

如果需要將多個請求鏈接在一起,則可以在異步HttpHandler ,但如果使用異步Page HttpHandler容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM