Почему IIS "запускает" приложение, которое все еще работает? - PullRequest
1 голос
/ 22 июля 2010

У нас есть приложение ASP.NET (3.5 SP1), работающее на IIS7 / Windows 2008. Мы перехватываем события Application_Start и Application_End в Global.asax.Мы также размещаем сервисы WCF в приложении и перехватываем события OnOpening и OnClosing через ServiceHostFactory.Таким образом, мы подумали, что нам гарантировано уведомление о любом запуске и остановке приложения, запланированном или незапланированном.

Несколько дней назад наше приложение перехватило событие Application_Start, находясь в состоянии «запущен» / «запущен».

Событие Application_End не предшествовало Application_Start (и даже не следовало за ним несколько минут спустя, если учитывать условия гонки).

Нашей первой мыслью было, что наше приложение на самом деле молча зависло и завершилось.На самом деле произошло то, что новый домен приложений развернулся для обслуживания входящих запросов, но фоновые потоки существующего домена приложений (мы много чего делаем в потоках ThreadPool) работали в течение нескольких дней - пока я не убил их с помощью IISRESET.

Предполагается, что Application_End не сработал, потому что исходный домен AppDomain не завершился ... но тогда почему Application_Start сработал?

Ищете подсказку или документ, описывающий, как работает механизм полуотключения + AppDomainStartup в ASP.СЕТЬ.

Заранее спасибо,

Говард Хоффман

1 Ответ

0 голосов
/ 08 августа 2010

Пожалуйста, узнайте о перезапуске пула приложений, который может привести к таким ситуациям.Когда IIS решает перезапустить пул, он сначала сначала инициализирует новый рабочий процесс (по очереди будет вызываться Application_Start), а затем выключает старый (Application_End).

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

Для разработчиков ASP.NET рекомендуется больше узнать об IIS.

...