Pregunta:
Tengo un sitio que tiene un bloqueo exclusivo en algunos recursos. Utilicé los eventos Application_Start y Application_End de .NET para adquirir y liberar el bloqueo de estos recursos en el momento adecuado. Para que esto funcione correctamente, solo puede haber una instancia de mi aplicación ejecutándose en un momento dado.
Para que esto suceda, configuré la propiedad Disable Overlapped Recycle
en el grupo de aplicaciones en True
. Se supone que esta propiedad garantiza que el proceso de trabajo anterior se apague por completo antes de que se inicie uno nuevo cada vez que se recicla el grupo de aplicaciones. Esto funciona bien siempre que el grupo de aplicaciones se recicla manualmente a través de IIS, automáticamente como resultado de que se alcanza el tiempo de inactividad o automáticamente de acuerdo con las reglas específicas de tiempo / intervalo de tiempo.
Sin embargo, cuando se actualiza web.config para el sitio, esta regla no se aplica: se inicia un nuevo proceso de trabajo antes de que el anterior termine de cerrarse. Esto hace que sucedan cosas malas. Tengo la propiedad Disable Recycling for Configuration Changes
establecida en False
ya que quiero que el grupo de aplicaciones se recicle cuando se actualice web.config; esto sucede con frecuencia durante el desarrollo.
¿Es esto algo que se espera o es un error en IIS? ¿ES mi única opción para configurar para que el cambio de web.config no recicle el grupo de aplicaciones? Prefiero no hacer esto, ya que estoy bastante seguro de que causará muchos dolores de cabeza a las personas que cambian la configuración y luego se olvidan de reciclar el grupo de aplicaciones.
Actualizar:
Para ser más claros, cuando se llama al evento de start
proceso de trabajo nuevo antes de que el proceso de trabajo anterior haya terminado de cerrarse, nunca se llama al evento de end
proceso de trabajo anterior: no ocurre fuera de secuencia, nunca ocurre en absoluto.
Respuesta:
De esta publicación de MSDN: https://blogs.msdn.microsoft.com/tess/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles/
Entonces, como parte de su proceso de implementación de código, parece que su grupo se reciclará cuando implemente cualquiera de estos cambios:
Reciclaje Inmediato
- Cambios de Web.config
- Cambios en Machine.config
- Cambios en Global.asax
- Cambios en el directorio bin
- Cambios en App_Code
( tomado de: https://stackoverflow.com/questions/302110/what-causes-an-application-pool-in-iis-to-recycle )