Como ya se ha mencionado, no es recomendable que la aplicación conserve datos grandes durante Application_End
, ya que esto podría desencadenarse cuando el grupo de aplicaciones se apaga, no al principio de su apagado. Esto se explica en forma más detallada (pero aún corta) here.
Si todavía quiere atrapar el cierre de un grupo de aplicaciones para todos los casos que no matan al instante, puede hacer lo siguiente:
manera sucia
1) Obtener límite de tiempo de apagado - Administrador de IIS -> Grupos de aplicaciones -> -> Configuración avanzada ... -> Grupo de modelos de proceso -> Límite de tiempo de apagado (segundo)
2) Cree un subproceso/tarea en la aplicación para que se ejecute el doble de veces que el apagado límite de tiempo para asegurar que el estado de "apagado" pueda ser capturado. Este hilo debe
i) comprobar si el grupo de aplicaciones se está cerrando
public bool IsShuttingDown()
{
return System.Web.Hosting.HostingEnvironment.ShutdownReason != ApplicationShutdownReason.None;
}
ii) si el cierre está activado, hacer tus cosas. Asegúrese de que se ejecute esas cosas sólo una vez
manera más correcta (como se indica here)
1) Crear una clase que implementa IRegisteredObject
public class HostingEnvironmentRegisteredObject : IRegisteredObject
{
// this is called both when shutting down starts and when it ends
public void Stop(bool immediate)
{
if (immediate)
return;
// shutting down code here
// there will about Shutting down time limit seconds to do the work
}
}
2) Registre su objeto (Global.asax.cs
)
protected void Application_Start()
{
// other initialization code here
HostingEnvironment.RegisterObject(new HostingEnvironmentRegisteredObject());
}
bueno, estos casos no puedo controlar. Quiero controlar lo que sé y tengo ... – Himberjack
si no te importa perder estos casos extremos, entonces es posible que no te molestes con el manejo de un apagado de aplicación elegante.solo haga que forme parte de las suposiciones de la aplicación – djeeg
La "caja de borde común" más común es la preocupación por un cierre "elegante" *, p. ej. para eliminar el registro, sin los inesperados .. los grupos de aplicaciones se pueden reciclar con bastante frecuencia (y para un entorno grande con muchas agrupaciones, esto significa que podría haber muchos eventos perdidos de "borde común"). – user2864740