我需要在IIS内处理长时间运行的请求,请求本身非常轻量级,但由于IO操作而耗费大量时间。基本上我需要查询另一个服务器,有时还会查询第三个服务器。因此,我想同时处理尽可能多的请求。为此,我需要异步处理请求,如何正确地实现?
使用Socket类,我可以很容易地编写以下内容:
在上面的示例中,一旦调用“Begin…”方法,线程就会被释放,并且响应会在另一个线程上发送,因此您可以轻松实现非常高的并发性。如何在IIS内部的HTTP处理程序中进行相同的操作?
使用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处理程序中进行相同的操作?