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?

¿Fue útil?

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?

Lo que haría es usar threadpool.registerwaitforsingoobject < / a> para administrar su sondeo con un tiempo de espera apropiado. Aquí hay una muestra de código que utilizo para evitar esperar en un servicio web que nunca regrese:

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();
            }
        }

Necesitará un IASYNCRESULT para trabajar con este enfoque, pero ese es un patrón establecido, no debe tener problemas para reducir las muestras aproximadamente.

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

http://msdn.microsoft.com/en-us/magazine/CC163725.ASPX

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top