Tiempo de espera de solicitud de IIS en la operación larga de ASP.NET

Estoy experimentando un tiempo de espera de solicitud de IIS cuando ejecuto una operación larga. Detrás de la escena, mi aplicación ASP.NET está procesando datos, pero la cantidad de registros que se procesan es grande y, por lo tanto, la operación lleva mucho tiempo.

Sin embargo, creo que IIS supera la sesión. ¿Es esto un problema con la sesión de IIS o ASP.NET?

Gracias por adelantado

Si desea extender el tiempo permitido para ejecutar un script ASP.NET, aumente el valor de Server.ScriptTimeout . El valor predeterminado es 90 segundos para .NET 1.xy 110 segundos para .NET 2.0 y posterior.

Por ejemplo:

 // Increase script timeout for current page to five minutes Server.ScriptTimeout = 300; 

Este valor también se puede configurar en su archivo web.config en el elemento de configuración httpRuntime :

   

enter image description here

Tenga en cuenta de acuerdo con la documentación de MSDN :

“Este tiempo de espera se aplica solo si el atributo de depuración en el elemento de comstackción es False. Por lo tanto, si el atributo de depuración es True, no tiene que establecer este atributo en un valor grande para evitar el apagado de la aplicación mientras se depura. ”

Si ya ha hecho esto pero está descubriendo que su sesión expira, aumente el valor ASP.NET HttpSessionState.Timeout :

Por ejemplo:

 // Increase session timeout to thirty minutes Session.Timeout = 30; 

Este valor también se puede configurar en su archivo web.config en el elemento de configuración sessionState :

      

Si su script tarda varios minutos en ejecutarse y hay muchos usuarios simultáneos, considere cambiar la página a una página asíncrona . Esto boostá la escalabilidad de su aplicación.

La otra alternativa, si tiene acceso de administrador al servidor, es considerar esta operación de larga ejecución como una candidata para implementar como una tarea progtwigda o un servicio de Windows.

¡Respuesta genial y exhaustiva por @Kev!

Como hice un procesamiento largo solo en una página de administración en una aplicación de WebForms, utilicé la opción de código. Pero para permitir una solución rápida temporal en la producción, utilicé la versión de configuración en una etiqueta en web.config. De esta forma, mi página de administración / procesamiento tuvo suficiente tiempo, mientras que las páginas para los usuarios finales mantuvieron su antiguo comportamiento de tiempo de espera.

A continuación les di la configuración para los Googlers que necesitan la misma solución rápida. Por supuesto, debe usar otros valores que no sean mi ejemplo de ‘4 horas’, pero tenga en cuenta que la sesión timeOut está en minutos, mientras que la solicitud executionTimeout está en segundos.

Y, como ya es 2015, para una solución NON-quickfix, debe utilizar .Net 4.5’s async / await now, si es posible, en lugar de la página ASYNC de .NET 2.0 que era lo último en tecnología cuando KEV respondió en 2010 :).

  ...  ... other stuff ..       ...  

Estoy publicando esto aquí, porque he pasado como 3 y 4 horas en él, y solo he encontrado respuestas como las de arriba, que dicen que agreguen el tiempo de executionTime , pero no resuelve el problema en el caso que estás usando ASP .NET Core . Para ello, esto funcionaría:

En el archivo web.config, agregue el atributo aspNetCore nodo aspNetCore .

    

En este ejemplo, estoy configurando el valor por 10 minutos.

Referencia: https://docs.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module#configuring-the-asp-net-core-module

Eliminar ~ carácter en la ubicación por lo

 path="~/Admin/SomePage.aspx" 

se convierte

 path="Admin/SomePage.aspx"