Подтвердить что ты не робот

Каковы возможные причины, по которым IIS бросает исключение ThreadAbortException и перерабатывает работника, при регистрации IIS "Изменение конфигурации IIS"?

Я начал видеть ошибки в веб-приложении .NET MVC, размещенном на Appharbor, в то время как фоновый поток работал - после тщательного анализа - я не могу решить причину.

Во-первых, исключение, которое я заметил, это ThreadAbortException.

Однако это действительно означает, что поток уничтожается. Перед тем как поток будет убит, вы увидите, что новый рабочий создается IIS, а Application_Start вызывается на том же компьютере. Когда новое приложение запущено и запущено, IIS убивает старое приложение, и новые запросы обрабатываются, как ожидалось.

В то же время IIS регистрирует сообщение:

ShutDown Message: IIS configuration change
HostingEnvironment initiated shutdown
HostingEnvironment caused shutdown
ShutDown Stack:    at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
   at System.Environment.get_StackTrace()
   at System.Web.Hosting.HostingEnvironment.InitiateShutdownInternal()
   at System.Web.Hosting.HostingEnvironment.InitiateShutdownWithoutDemand()
   at System.Web.Hosting.PipelineRuntime.StopProcessing()

В журнале мониторинга .Net Health Monitor вы получаете:

Message: Application is shutting down. Reason: Configuration changed.
Event Detail Code: 50004

Быстрый google показывает, что исходный код, который я подозреваю, является причиной ошибки:

if (!HostingEnvironment.StopListeningWasCalled && !HostingEnvironment.ShutdownInitiated) {
    // If GL_STOP_LISTENING wasn't triggered, the reset is likely due to a configuration change.
    HttpRuntime.SetShutdownReason(ApplicationShutdownReason.ConfigurationChange, "IIS configuration change");
}

источник: https://github.com/Microsoft/referencesource/blob/master/System.Web/Hosting/IPipelineRuntime.cs

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

В исходном коде указано:

Если GL_STOP_LISTENING не был запущен, reset является вероятным из-за изменение конфигурации.

Следовательно, что еще может вызвать ошибку и приложение, если файлы web.config/other config не изменяются?

4b9b3361

Ответ 1

Похоже, это ошибка Microsoft.

Неожиданное завершение работы ASP.Net после многих файлов App_Data изменения происходят на сервере под управлением Windows Server 2012 R2

Исправление: https://support.microsoft.com/en-us/kb/3052480

Последний отзыв: 09/08/2015 16:29:00

Как только это исправление было применено, ошибки ушли!

Ответ 2

Есть много причин, которые перечислены в этой полезной записи в блоге.

  • Настройки пула приложений
  • Элемент processModel файла machine.config
  • Ограничение памяти
  • Ограничение запроса
  • Тайм-аут

Ответ 3

Изменение конфигурации IIS должно происходить, когда что-то (что-либо) изменяется в конфигурации или коде приложения IIS. Примеры:

  • Изменение в web.confg
  • Изменение в любой dll, aspx и т.д.

В любом из этих случаев приложение IIS будет перерабатываться. Кроме того, IIS будет перерабатывать ваш процесс каждые 29 часов по умолчанию, но это, вероятно, не будет называться "Изменение конфигурации IIS"