Cómo establecer IHttpAsyncHandler un tiempo de espera?
-
13-12-2019 - |
Pregunta
He tratado de establecer el executionTimeout en la web.archivo de configuración:
<compilation debug="false" targetFramework="4.5">
<httpRuntime executionTimeout="30"/>
Mirando en el Administrador de IIS Solicitudes de página puedo ver las solicitudes no ser despedido después de 30 segundos.
Debería de implementar un Temporizador dentro de mi IHttpAsyncHandler?
Solución
Con la aparente falta de soporte incorporado para los tiempos de espera de ihttpasynchandler, presumiblemente debe administrar su propio tiempo de espera. Tal vez esto es por diseño; Después de todo, está eligiendo un patrón asíncrono, ¿quién cree MSFT, está intentando establecer un tiempo de espera predeterminado para su tarea de larga duración?
private const int REQUEST_TIMEOUT = 30000; // miliseconds (30 sec)
private void CallService()
{
try {
string url = "somewebservice.com";
WebRequest request = WebRequest.Create(url);
// Asynchronously fire off the request
IAsyncResult result = request.BeginGetResponse(new AsyncCallback(MyRoutineThatUsesTheResults), request);
// Handle timed-out requests
ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(RequestTimeout), request, REQUEST_TIMEOUT, true);
}
catch (Exception ex) {
_logger.Error("Error during web service request.", ex);
}
private void RequestTimeout(object state, bool timedOut)
{
if (timedOut) {
WebRequest request = (WebRequest)state;
_logger.WarnFormat("Request to {0} timed out (> {1} sec)", request.RequestUri.ToString(), REQUEST_TIMEOUT / 1000);
request.Abort();
}
}
Además, se encontrará con problemas cuando IIS decide reciclar su aplicación de la aplicación / desgarrar su dominio de la aplicación mientras se está ejecutando su votación. Si eso es una condición que desea manejar, puede usarlo hostingenvironment.registerObject .
Otros consejos
Usted puede tratar de añadir a su web.config
archivo:
<system.web>
<pages asyncTimeout="30" />
</system.web>
Para su PageAsyncTask
, pero podría ser honrados por IHttpAsyncHandler
demasiado?
Si no, puede que tenga más suerte con la nueva HttpTaskAsyncHandler
en ASP.Net
4.5 versión:http://www.asp.net/vnext/overview/whitepapers/whats-new#_Toc318097378
Tendría que usar RegisterasyncTask verifique el siguiente enlace