Мне нужно обрабатывать долго выполняющиеся запросы внутри IIS, обработка самого запроса очень легка, но занимает много времени, в основном из-за ввода-вывода.В основном мне нужно запросить другой сервер, который иногда запрашивает третий сервер.Поэтому я хочу обрабатывать как можно больше запросов одновременно.Для этого мне нужно обрабатывать запросы асинхронно, как мне сделать это правильно?
Используя класс 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 ...», и ответ отправляется в другой поток, вы можете легко достичь очень высокого уровня параллелизма.Как вы делаете то же самое в обработчике HTTP внутри IIS?