asp.net mvc - net - Aumentar el tiempo de espera de solicitud de aplicación web azul
microsoft asp.net mvc 4 (5)
¿Hay alguna manera de aumentar el tiempo de espera de solicitud para las aplicaciones web de Azure?
Si demoro la solicitud en algo más de 2 minutos, la solicitud falla sin error (se devuelve una página en blanco) o una vaga respuesta 503.
public ActionResult Index()
{
System.Threading.Thread.Sleep(230000);
return View();
}
Tengo algunas solicitudes de ejecución prolongadas que necesito ejecutar (cargar archivos grandes / trabajos de conversión de pdf grandes). ¿Hay alguna forma de evitar esto? Prefiero evitar el uso de VM hosting es posible. He intentado escalar la aplicación web a planes básicos o estándar, pero no parece hacer ninguna diferencia.
Espero que esto sea de alguna ayuda https://azure.microsoft.com/en-us/blog/new-configurable-idle-timeout-for-azure-load-balancer/ . Pero creo que es una mala idea mantener la solicitud mientras se ejecuta un trabajo pesado. Imho, será mejor que implemente un trabajo en segundo plano y verifique el estado del cliente de vez en cuando.
Intente hacer que su acción sea Async si se supone que debe ser de larga duración para evitar puntos muertos en su servidor web:
public async Task<ActionResult> Index()
{
await Task.Delay(230000);
return View();
}
Y puede establecer el tiempo de espera del script en el código del controlador:
HttpContext.Current.Server.ScriptTimeout = 300;
Tenga en cuenta que HttpContext se crea una instancia por solicitud, por lo que volverá al valor predeterminado en la siguiente solicitud
No, no puede aumentar el tiempo de espera de los Servicios de aplicaciones de Azure (es de 230 segundos). Puede moverse a un servicio en la nube o IIS alojado en una máquina virtual donde tiene control sobre esa configuración. También puede pasar a un modelo asíncrono en el que el cliente realiza una solicitud, obtiene algún tipo de ticket o identificador que puede sondear para ver si se realizó el procesamiento. Hay muchos ejemplos de modelos de tipo asíncrono para aplicaciones web que puede elegir. Ref: https://social.msdn.microsoft.com/Forums/en-US/05f254a6-9b34-4eb2-a5f7-2a82fb40135f/time-out-after-230-seconds?forum=windowsazurewebsitespreview
Puede implementar la aplicación web utilizando el script de automatización y agregar esta línea en "recursos":
{
"name": "WEBSITES_CONTAINER_START_TIME_LIMIT",
"value": 1800
},
donde el valor es 230 por defecto, pero se puede aumentar hasta 1800. También puede agregar una Nueva configuración en Configuración de la aplicación, denominada WEBSITES_CONTAINER_START_TIME_LIMIT y con el valor de segundos que desee.
Tienes que hacer algunos cambios en web.config.
<system.webServer>
<monitoring>
<triggers>
<statusCode>
<addstatusCode="500"subStatusCode="0"win32StatusCode="0"
count="10"timeInterval="00:00:30" />
</statusCode>
</triggers>
<actionsvalue="Recycle" />
</monitoring>
Para más:
Tiempo de espera de conexión (tiempo de espera caducado) en el sitio de aplicación web de Azure