Ho bisogno di elaborare richieste a lungo termine all'interno di IIS, la gestione della richiesta è molto leggera ma richiede molto tempo principalmente a causa di IO. Fondamentalmente ho bisogno di interrogare un altro server, che a volte interroga un terzo server. Quindi voglio elaborare più richieste che posso contemporaneamente. Per questo ho bisogno di elaborare le richieste in modo asincrono come faccio a farlo correttamente?Come elaborare le richieste di lunga durata con un gestore HTTP in IIS?
Uso della classe Socket ho potuto facilmente scrivere qualcosa di simile:
// ..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);
}
Nell'esempio qui sopra il filo viene rilasciato non appena chiamo il metodo "Begin ...", e la risposta viene inviato su un altro thread, quindi è possibile ottenere facilmente una concorrenza molto alta. Come si fa lo stesso in un gestore HTTP all'interno di IIS?
http://msdn.microsoft.com/en-us/magazine/cc164128.aspx –
http://msdn.microsoft.com/en-us/library/bb398986.aspx aiuta troppo –