Когда Application_End не вызывается в asp.net WebService

Я знаю, что в следующих случаях будет вызываться Apllication_end:

  1. отредактируйте файл конфигурации для приложения, которое работает.
  2. изменить DLL в каталоге bin.
  3. остановить (или перезапустить) IIS.
  4. Переработка процессов включена либо в пулах приложений IIS6, либо с использованием рабочего процесса aspnet.

но мой вопрос: в каких случаях он не будет вызван?
Я знаю, что он не будет вызван, если вы вручную завершите процесс w3wp или если сервер будет жестоко выключен.

Есть ли другие сценарии?

Спасибо!

2 ответа

Решение

Кажется, что жестокое закрытие может быть вызвано OutOfMemoryException, который вызвал сбой в создании AppDomain, которые необходимы для выполнения запросов. В этом случае Application_end не будет вызываться.

Тип события: ошибка
Источник события: ASP.NET 2.0.50727.0
Категория события: нет
Код события: 1334
Дата: 22.04.2012
Время: 11:23:13
Пользователь: N/A
Компьютер: CCBSHAIS02
Описание:
Не удалось инициализировать домен приложения:/LM/W3SVC/1/Root/AgentWS

Исключение: System.SystemException

Сообщение: не удалось создать домен приложения.

StackTrace: в System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment(строковый appId, IApplicationHost appHost, hostingingEnvironmentParameters hostingParameters) в System.Web.Hosting.ApplicationManager.

InnerException: System.OutOfMemoryException

Сообщение: было сгенерировано исключение типа System.OutOfMemoryException.

StackTrace: в System.AppDomain.nCreateDomain(String friendlyName, настройка AppDomainSetup, Evidence предоставил SecurityInfo, Evidence creatorsSecurityInfo, IntPtr parentSecurityDescriptor) в System.AppDomain.CreateDomain(строковый friendlyName, папка для Windows. (String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)

для дальнейшего чтения по IIS и доменам приложений посмотрите на: http://weblogs.asp.net/owscott/archive/2007/09/02/application-vs-appdomain.aspx

Ответ на ваш вопрос в основном уже в вашем вопросе. Application_End вызывается каждый раз, когда процесс, на котором размещается ваш веб-сервис, корректно завершается.

Единственный раз, когда это произойдет:

  1. действие заставило IIS перезапустить процесс службы (изменение файла вызовет это)
  2. служба IIS закрыта
  3. процесс переработки.

Если процесс внезапно завершается (т. Е. Убивает процесс w3wp), у него не будет возможности запустить.

Другие вопросы по тегам