[英]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.