У меня очень простое приложение mvc 2, размещенное на платформе общего хостинга в aspnix http://www.aspnix.com.
Иногда пользователи теряли аутентификацию (я использую стандартного поставщика членства) во время навигации по сайту и перенаправлялисьна страницу входа.После некоторых исследований я начинаю подозревать, что сеанс потерян из-за перезапуска приложения, поэтому я решил установить и настроить службу мониторинга работоспособности для отслеживания завершения работы приложения и перезапуска.
После некоторых запросовприложение я начинаю видеть следующую запись в журнале мониторинга работоспособности:
Event code: 1002 Event message: Application is shutting down. Reason: Hosting environment is shutting down. Event time: 12/8/2010 8:16:33 AM Event time (UTC): 12/8/2010 3:16:33 PM Event ID: d92fbba0487b4bab97bd7eff4b0083bb Event sequence: 38 Event occurrence: 1 Event detail code: 50002 Application information: Application domain: /REMOVED FOR PRIVACY! Trust level: Full Application Virtual Path: / Application Path: C:\REMOVED FOR PRIVACY! Machine name: REMOVED FOR PRIVACY! Process information: Process ID: 12516 Process name: w3wp.exe Account name: REMOVED FOR PRIVACY!
и затем перезапуск приложения.
Затем я обращаюсь в службу поддержки aspnix и он говорит, что сервервсе в порядке, что какой-то другой большой сайт работает без проблем на том же сервере и что это, вероятно, проблема моего приложения.
Итак, я начинаю исследовать свое приложение, но не могу найти никаких проблем.
Я также понимаю, что отключение происходит также, когда я запрашиваю статический ресурс, например, изображение png!
После некоторых исследований я нашел этот интересный пост в блоге Скотта Гу: http://weblogs.asp.net/scottgu/archive/2005/12/14/433194.aspx
Итак, я перехватываю событие Application_End в global.asax, как учит Скотт, а затем отправляюотправлять почту каждый раз, когда мое приложение закрывается ... и содержимое всегда одинаково:
_shutDownMessage=HostingEnvironment initiated shutdown
HostingEnvironment caused shutdown
_shutDownStack= 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()
Я знаю, что причинами перезапуска могут быть изменения файла web.config, изменения в корзине илифайлы aspx, чрезмерное использование памяти и т. д. Но в этом случае завершение работы приложения происходит также по запросу статического ресурса, а другая часть приложения очень проста и использует только стандартный поставщик членства и некоторый запрос linq to sql...
Я также подписался на событие Application_Error для всех необработанных исключений без результатов.
Есть идеи?