Я начал видеть ошибки в веб-приложении .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 не изменяются?