2012-04-24 8 views
5

sé que en los casos siguientes Apllication_end se llamará:Application_End no se llama en el servicio Web asp.net

  1. editar el archivo de configuración para una aplicación que se está ejecutando.
  2. cambie un dll en el directorio bin.
  3. detener (o reiniciar) IIS.
  4. El reciclaje de procesos se activó en grupos de aplicaciones IIS6 o mediante el proceso de trabajo aspnet.

pero mi pregunta es ¿cuáles son los casos en que no se llamará?
Sé que no se invocará si finaliza manualmente el proceso w3wp o si el servidor se cerrará brutalmente.

¿Hay algún otro escenario?

Gracias!

+1

La descarga programática del dominio de la aplicación probablemente también lo hará. Aunque no me he confirmado. –

Respuesta

2

Parece que el cierre brutal puede ser causado por OutOfMemoryException que causó un error al crear AppDomain que son necesarios para ejecutar las solicitudes. En este escenario, no se llamará a Application_end.

Tipo de evento: Error Origen del suceso
: ASP.NET 2.0.50727.0
Categoría de eventos: Ninguno
Evento ID: 1334
Fecha: 22/04/2012
Hora: 11:23: 13 AM
usuario: N/a
Computer: CCBSHAIS02
Descripción:
Error al inicializar el dominio de aplicación:/LM/W3SVC/1/Root/AgentWS

Excepción: System.SystemException

Mensaje: Error al crear AppDomain.

StackTrace: en System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment (String Id de aplicación, IApplicationHost APPHOST, HostingEnvironmentParameters hostingParameters) en System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironmentAndReportErrors (String Id de aplicación, IApplicationHost APPHOST, HostingEnvironmentParameters hostingParameters)

InnerException: System.OutOfMemoryException

Mensaje: excepción de tipo '' se System.OutOfMemoryException.

StackTrace: en System.AppDomain.nCreateDomain (String friendlyName, configuración AppDomainSetup, Evidencia providedSecurityInfo, Evidencia creatorsSecurityInfo, IntPtr parentSecurityDescriptor) en System.AppDomain.CreateDomain (String friendlyName, Evidencia securityInfo, información AppDomainSetup) en System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment (String APPID, IApplicationHost apphost, HostingEnvironmentParameters hostingParameters)

para leer más adelante IIS y AppDomains miran: http://weblogs.asp.net/owscott/archive/2007/09/02/application-vs-appdomain.aspx

2

La respuesta a su pregunta ya está en su pregunta. Application_End se invoca cada vez que el proceso que aloja su servicio web se cierra correctamente.

La única vez que esto sucedería es:

  1. una acción causó IIS para reiniciar el proceso de servicio (cambio de un archivo que obligaría a esto)
  2. el servicio IIS se cierra
  3. reciclaje de procesos.

Si el proceso finaliza abruptamente (es decir, se elimina el proceso w3wp), no tendrá la oportunidad de ejecutarse.

+0

Sé todo lo que había escrito, le pregunté si estaba familiarizado con otros escenarios ... –

+0

+1 para obtener información correcta, e ir más allá de la ruta fácil de detenerse en su primera oración. –

+0

@Dor: a mi conocimiento, no hay otros escenarios que podrían causar que el proceso se reciclara con gracia. – pdriegen

Cuestiones relacionadas