2011-12-30 2 views
3

В моем веб-приложении по какой-либо причине по каждому причине вызывается Application.End, и приложение перезапускается. Когда я устанавливаю точку останова в Applicaion_End, я не получаю полезную трассировку стека. Кроме того, в Event Viewer нет записей. Согласно MSDN, следующий может вызвать перезапуск приложения:Как узнать, почему веб-приложение ASP.NET перезапускается

  • Добавление, изменение или удаление сборок из Bin папку приложения.
  • Добавление, изменение или удаление ресурсов локализации из Папки App_GlobalResources или App_LocalResources.
  • Добавление, изменение или удаление файла приложения Global.asax.
  • Добавление, изменение или удаление файлов исходного кода в каталоге App_Code .
  • Добавление, изменение или удаление конфигурации профиля.
  • Добавление, изменение или удаление ссылок на веб-службу в каталоге App_WebReferences.
  • Добавление, изменение или удаление файла Web.config приложения.

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

Редактировать: Я решил проблему сейчас, выполнив код и наблюдая отметки времени в Проводнике. При запуске приложения я читаю значение из базы данных доступа, которая вызывает создание и удаление файла .ldb. Однако на этот вопрос еще не дан ответ. Есть ли журнал, который записывает такие события, которые заставляют приложение перезапускаться?

+0

Вы работаете на iis? возможно, это перезапуск, вызванный перезагрузкой пула приложений. – BigMike

+2

Почему вы просто не сортируете файлы и папки по дате изменения? –

+0

@BigMike Да, я на IIS. Я включил все записи журнала для утилизации пула приложений, но в Event Viewer нет записей, поэтому я думаю, что это просто перезапуск приложения. Кроме того, то же самое происходит и в Visual Studio Development Server. –

ответ

4

Тесс Феррандес написал хорошее blog post о том, как определить причину для рециркуляции доменов приложений. Тесс может сказать, как зарегистрировать событие перезапуска:

Как вы определяете, что вызвало перезапуск приложения? В ASP.NET 2.0 вы можете использовать встроенные события мониторинга работоспособности для перезапуска приложений приложений, а также причины перезагрузки. Для того, чтобы сделать это изменить файл web.config мастер в C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG директории и добавьте следующий раздел

<healthMonitoring> 
    <rules> 
    <add name="Application Lifetime Events Default" 
     eventName="Application Lifetime Events" 
     provider="EventLogProvider" profile="Default" minInstances="1" 
     maxLimit="Infinite" minInterval="00:01:00" custom="" /> 

Для включения регистрация для IIS6 вы можете использовать:

cscript adsutil.vbs Set w3svc/AppPools/DefaultAppPool/LogEventOnRecycle 255 

Для IIS7 вы можете управлять им из диспетчера IIS - пулы приложений - расширенные настройки.

+0

Я не считаю, что App Pool - дополнительные настройки, о которых вы говорите, - это то же самое, что и мониторинг работоспособности. Эти настройки относятся к событиям перезаписи. Они не охватывают всю гамму событий мониторинга работоспособности по умолчанию, настроенных в элементе eventMappings для healthMonitoring. Насколько я могу судить, вы все равно должны использовать параметры настройки работоспособности веб-уровня web.config для всех версий .NET и IIS. Они более детализированы, и вы можете также настроить различных поставщиков, таких как поставщик электронной почты, поставщик журнала событий или поставщик SQL, чтобы зафиксировать событие работоспособности. –