Какие события приводит к перезапуску приложения asp net
В моем веб-приложении Application.End вызывается после каждого запроса по какой-то причине, и приложение перезапускается. Когда я устанавливаю точку останова в Applicaion_End , я не получаю полезный стек trace. Кроме того, в средстве просмотра событий нет записей. Согласно MSDN, следующее может привести к перезапуску приложения:
- Добавление, изменение или удаление сборок из папки Bin приложения.
- Добавление, изменение или удаление ресурсов локализации из папок App_GlobalResources или App_LocalResources.
- Добавление, изменение или удаление файла Global.asax приложения.
- Добавление, изменение или удаление файлов исходного кода в каталоге App_Code .
- Добавление, изменение или удаление конфигурации профиля.
- Добавление, изменение или удаление ссылок на веб-службы в каталоге App_WebReferences.
- Добавление, изменение или удаление файла Web.config приложения.
Я предполагаю, что мой код изменяет какой-то файл, который запускает перезапуск приложения. Есть ли какой-нибудь способ узнать, что именно вызывает перезапуск приложения?
Edit: теперь я решил свою проблему, пройдя через код и наблюдая за метками времени в Explorer. При запуске приложения я считываю значение из базы данных access, которое вызывает создание и удаление файла .ldb. Однако на этот вопрос пока нет ответа. Существует ли какой-либо журнал, который записывает такие события, которые приводят к перезапуску приложения?
1 ответ
Я использую python 2.5 на windows. Все, что я делаю, - это распаковываю большой файл (18 Мб - список словарей) и изменяю некоторые его значения. Теперь это прекрасно работает. Но когда я добавляю пару отпечатков, IDLE перезапускается. И, как ни странно, это происходит там, где я добавил отпечаток.
Тесс Феррандес написала хороший пост в блоге о том, как определить причину утилизации домена приложения. Тесс имеет это сказать о том, как зарегистрировать событие перезапуска:
Чтобы включить ведение журнала для IIS6, вы можете использовать:
Для IIS7 вы можете управлять им из IIS manager - Пулы приложений - Дополнительные настройки.
Похожие вопросы:
Я использую python 2.5 на windows. Все, что я делаю, - это распаковываю большой файл (18 Мб - список словарей) и изменяю некоторые его значения. Теперь это прекрасно работает. Но когда я добавляю.
У меня есть некоторый код в моей процедуре выхода из системы, который удаляет некоторые временные файлы сеанса, когда пользователь выходит из системы или когда сеанс истекает. Удаление этих папок.
Класс приложения поддерживает два метода, которые позволяют управлять жизненным циклом приложения: Application_Start и Application_End . Метод Application_Start вызывается при старте приложения, а метод Application_End - перед завершением его работы.
По умолчанию в классе приложения определяется только метод Application_Start, в котором производится конфигурационная настройка: регистрация маршрутов, фильтров и т.д.
Метод Application_End вызывается перед завершением работы приложения и, как правило, используется для освобождения связанных ресурсов, наподобие подключений к базам данных, но сейчас, как правило, освобождение ресурсов можно произвести в коде самого приложения, и поэтому в методе Application_End нет большой необходимости.
Жизненный цикл запроса предполагает вызов ряда событий в следующей последовательности:
BeginRequest : событие возникает, когда приложение получает новый запрос
AuthenticateRequest/PostAuthenticateRequest : событие AuthenticateRequest возникает при идентификации (аутентификации) пользователя, сделавшего запрос. А после его обработки срабатывает событие PostAuthenticateRequest
AuthorizeRequest/PostAuthorizeRequest : AuthorizeRequest возникает при авторизации запроса, после этого срабатывает событие PostAuthorizeRequest
ResolveRequestCache/PostResolveRequestCache : событие ResolveRequestCache возникает, когда приложение обращается к кэшу для получения данных. При получении данных их кэша затем срабатывает событие PostResolveRequestCache
MapRequestHandler/PostMapRequestHandler : MapRequestHandler срабатывает при определении обработчика запроса. После выбора обработчика срабатывает событие PostMapRequestHandler
AquireRequestState/PostAquireRequestState : событие AquireRequestState возникает при получении данных состояния, связанных с запросом (например, данные сессии). И после него срабатывает событие PostAquireRequestState
PreRequestHandlerExecute/PostRequestHandlerExecute : событие PreRequestHandlerExecute происходит непосредственно перед началом работы обработчика запроса, а событие PostRequestHandlerExecute - после его работы
ReleaseRequestState/PostReleaseRequestState : событие ReleaseRequestState возникает, когда приложению больше не требуются данные, ассоциированные с запросом. И после освобождения этих данных просиходит событие PostReleaseRequestState
UpdateRequestCache : возникает при обновлении данных в кэше
LogRequest/PostLogRequest : событие LogRequest происходит непосредственно перед каждым логгированием, а PostLogRequest - после завершения всех обработчиков событий
EndRequest : возникает при завершении обработки запроса, когда данные для ответа уже готовы к отправке клиенту
PreSendRequestContent : возникает после отправки заголовков, но перед отправкой основного содержимого ответа
И если на определенной стадии возникнет ошибка, то сработает событие Error .
Схематично жизненный цикл приложения и запроса можно представить следующим образом:
При необходимости мы можем обработать эти события. Например, в файле Global.asax.
Для этого нам надо определить в классе MvcApplication методы, имеют следующее наименование: Application_[Название_события]. Например, изменим класс в Global.asax следующим образом:
После этого мы можем обратиться к этому свойству в приложении, например, в контроллере HomeController. Пусть в нем происходит вывод всех отработавших событий на страницу:
С помощью лямбда-выражений устанавливаются обработчики событий (src, args) => AddEvent("BeginRequest") . В качестве параметров передаются объект, вызвавший событие - src , и параметр EventArgs - args . Результат выполнения метода в контроллере HomeController будет тем же.
У нас возникла проблема с довольно сложным сайтом. Он перезапускается во время загрузки файла. Не на каждом файле, но точно на каждом 5-10-м файле. Мы используем собственный VirtualPathProvider, поэтому это может быть причиной. У нас также есть фоновые рабочие потоки, и это тоже может быть причиной. Было бы здорово просто узнать причину.
Проблема возникает в XP (IIS 5.1) и Windows Server 2003 (IIS 6).
Разрешение:
Спасибо, ребята, нам удалось его поймать. Это вызвано максимальным количеством перекомпиляций. Скорее всего проблема в нашем VirtualPathProvider, но это совсем другой вопрос.
- Взломать блог ScottGu отлично.
- Мониторинг через machine.config тоже хорош, но я предпочитаю регистрировать его в нашем журнале.
- Как оказалось, самым простым решением является проверка свойства HostingEnvironment.ShutdownReason в моем методе Application_End .
Вы ознакомились с предложениями по ведению журнала из "Ведение журнала завершения работы приложения ASP.NET События "? Это было бы моим предложением для получения дополнительной информации о том, что происходит.
Добавление или удаление папок внутри папки приложения приведет к перезапуску пула приложений (наиболее вероятная причина в вашем случае), а также ко многим другим вещам. Вот интересная статья:
На том же сайте есть несколько хороших советов о том, как отслеживать перезапуски, о чем вы на самом деле спрашивали. Возможные варианты: web.config и EventViewer или Performance Monitor.
Она проведет вас через этапы определения проблемы и способов ее решения.
Еще одна вещь, на которую следует обратить внимание, - это сканирование файлов антивирусным программным обеспечением в корне сайта - это может изменить дату изменения файла и привести к повторному использованию приложения.
Взгляните на эту статью в центре разработчиков шаблонов и практик Microsoft:
См. Также эту запись в блоге Джеффа Этвуда:
Как говорили другие, проверьте HostingEnvironment.ShutdownReason . если значение равно BinDirChangeOrDirectoryRename , то какой-то процесс изменяет некоторые файлы (создание, удаление, изменение атрибута) в папке приложения.
Если вы не можете найти, кто это делает, воспользуйтесь Process Monitor. из SysInternals. В моем случае это был антивирусный процесс, который устанавливал файлы CreationTime (их предыдущее CreationTime!).
Теперь у нас проблема с довольно сложным сайтом. Он перезапускается во время загрузки файла. Не по каждому файлу, но на каждом 5-м-10-м наверняка. Мы используем собственный VirtualPathProvider, поэтому это может быть причиной. У нас также есть потоки рабочего стола, и это также может быть причиной. Было бы здорово узнать причину.
Проблема возникает в XP (IIS 5.1) и Windows Server 2003 (IIS 6).
Разрешение:
Спасибо, ребята, нам удалось это поймать. Это вызвано максимальными рекомпиляциями. Скорее всего, проблема в нашем VirtualPathProvider, но это совершенно другой вопрос.
- Взлом в блоге ScottGu отлично работает.
- Мониторинг через machine.config также замечательный, но я предпочитаю записывать его в наш журнал.
- Как оказалось, самым простым решением является проверка свойства HostingEnvironment.ShutdownReason в моем методе Application_End.
ОТВЕТЫ
Ответ 1
Ответ 2
Добавление или удаление папок внутри папки приложения приведет к тому, что пул приложений будет перерабатываться (наиболее вероятная причина в вашем случае), а также многое другое. Вот интересная статья:
на том же сайте есть несколько хороших советов о том, как отслеживать перезагрузки, которые вы действительно спрашивали. Возможны следующие варианты: web.config и EventViewer или Performance Monitor.
Ответ 3
Она проведет вас через шаг, связанный с разработкой проблемы, и как ее решить.
Еще одна вещь, о которой следует помнить, - это файлы сканирования антивирусного программного обеспечения под корнем сайта - это может изменить измененную дату файла и привести к перезагрузке приложения.
Ответ 4
Взгляните на эту статью в центре разработчика и практики Microsoft:
Также см. эту запись в блоге Джефф Этвуд:
Ответ 5
Как говорили другие, проверьте HostingEnvironment.ShutdownReason . если значение BinDirChangeOrDirectoryRename , то какой-то процесс изменяет некоторые файлы (создание, удаление, изменение атрибута) в папке приложения.
Если вы не можете найти, кто это делает, используйте Process Monitor из SysInternals. В моем случае это был антивирусный процесс, который устанавливал файлы CreationTime (к их предыдущему CreationTime!).
Виртуальный каталог, который мы создаем в самом начале разработки сайта, при исполнении страниц ассоциируется с отдельным приложением. Приложение является отдельной программной единицей, изолированной при исполнении от страниц других виртуальных каталогов. Все, что находится в виртуальном каталоге, относится к приложению.
Web -страницы и Web -службы одного виртуального каталога выполняются в одном и том же домене. Содержимое другого виртуального каталога выполняется в своем домене. Выполнение приложений из разных виртуальных каталогов в отдельных изолированных доменах гарантирует, что одно приложение не сможет оказывать влияние на работу другого, в том числе видеть его данные, хранящиеся в оперативной памяти. За этим строго следит общеязыковая среда выполнения CLR.
Приложение может состоять из следующих компонентов:
- Web-страницы (файлы .aspx) - основные рабочие единицы любого приложения
- Web-службы (файлы .asmx) - выполняют полезную работу для сторонних приложений
- Файлы отделенного кода (.cs) - содержат исполнимый код для программного управления объектами, определяемыми в интерфейсной части страницы
- Конфигурационные файлы (Web. config ) - содержат настройки среды исполнения ( рабочего процесса ) как для всего приложения в целом, так и для групп страниц, расположенных в подкаталогах виртуального каталога
- Файл событий приложения ( Global.asax ) - содержит обработчики событий, которые реагируют на глобальные события самого приложения
- Другие компоненты: базы данных, пользовательские элементы управления, отдельные сборки, каскадные таблицы стилей , рисунки, XML-файлы и т.д.
При создании домена приложение может создавать в нем не один экземпляр объектов приложения, а целый пул , содержащий от 1 до 100 экземпляров, в зависимости от масштабируемости (количества) запросов. Каждый новый запрос от одного и того же клиента может адресоваться к разным экземплярам пула домена.
Файл приложения Global.asax
Заготовки методов класса приложения с предопределенными именами
Объект приложения создается автоматически, поэтому мы не можем сами регистрировать некоторые обработчики, присваивая им произвольные имена. Как и в случае с экземпляром класса Page, мы можем использовать только предопределенные имена обработчиков приложения.
Демонстрация событий приложения
Приведем пример, иллюстрирующий работу рассмотренных методов уровня приложения.
Читайте также: