Назад | Перейти на главную страницу

Перезагрузка рабочего процесса IIS без уничтожения w3wp?

Я запускаю приложение ASP.NET на IIS 7.

Сервер блаженно гудит, пока

  1. Возникает событие Application_Start
  2. Все запросы, сделанные текущими подключенными пользователями, выдают ошибку Connection_Abandoned_By_ReqQueue в httperrX.log
  3. Возникает событие Application_End

Похоже, что рабочий процесс повторяется, не так ли? Но w3wp никогда не умирал, новый w3wp так и не запускался, и никакая переработка не регистрировалась.

Что могло быть причиной этого? И как мне этого не допустить?


Технические подробности:


Обновить

Я сталкиваюсь с этой ситуацией при нагрузочном тестировании веб-приложения.

На протяжении всего процесса тестирования я много раз перезапускал и перезапускал веб-сервер. По-видимому, это меняет криптографический ключ, используемый для получения веб-ресурсов, как объясняется здесь: Исключение «Заполнение недействительно и не может быть удалено» на WebResource.axd. Программное обеспечение для тестирования недостаточно умен, чтобы изменять свои запросы (без значительных изысков) в ответ на новый ключ.

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

Две вещи остаются неизвестными:

  1. Вызвана ли переработка заблуждение запросы к WebResource.axd или любой запросы к WebResource.axd?
  2. Почему это вызывает псевдо-рециркуляцию вместо обычной рециркуляции или ее полное отсутствие? Это поведение еще не задокументировано.

Каждый раз при изменении файла в папке приложения это может вызвать перезапуск пула приложений. Антивирусные мониторы реального времени печально известны этим, но на самом деле существует довольно большой список потенциальных нарушителей. Проверьте следующее от Тесс Феррандес:

http://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx

В частности, вы можете включить событие мониторинга работоспособности ASP.Net для записи активности в журнал событий приложения с указанием причины перезапуска.

Событие Application_Start будет инициировано только один раз, в начало жизни приложений. Я не слышал о Connection_Abandoned_By_ReqQueue, но похоже, что веб-приложение делает что-то необычное в обработчике Global.asax для Application_Start.

Событие Application_End запускается из-за исключения, вызывающего завершение работы приложения; знаменуя собой конец жизненного цикла приложения.

Я предполагаю, что вы знаете о жизненном цикле приложения ASP .Net применительно к IIS6 и IIS7, если нет:

IIS 6.0 - http://msdn.microsoft.com/en-us/library/ms178473.aspx
IIS 7.0 - http://msdn.microsoft.com/en-us/library/bb470252.aspx

Эти статьи могут помочь устранить любую путаницу, если вы раньше не смотрели на это.

Чтобы решить эту проблему, я бы начал с определения приложения, в котором произошел сбой. Если можете, взгляните на обработчики Global.asax, в противном случае проверьте наличие обновлений для приложения.

Это также может быть случай повреждения памяти согласно одному потоку, который я прочитал об исключении, которое вы получаете, но я не уверен, с чего вы начали бы расследование, если это так.