Application_End global.asax

Может ли кто-нибудь сказать мне, когда Application_End запускается в жизненном цикле приложения? Будет ли Application_End запускаться автоматически после завершения всех сеансов? + Есть ли другие причины, по которым Application_End может срабатывать?

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

Cybis 14.11.2008 00:38

Это не ответ на ваш вопрос, но полезно также выяснить, происходит ли это событие, и вы не знаете, почему: blogs.msdn.com/b/tess/archive/2006/08/02/…

Tao 28.03.2014 13:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
43
2
52 115
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Событие application_end в первую очередь возникает при перезапуске пула IIS или при выгрузке самого приложения. Еще одна вещь, которую следует отметить, что изменение зависимого файла (скажем, web.config) приведет к перезагрузке приложения, что приведет к срабатыванию события application_end, когда оно закрывается.

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

Я заметил, что при изменении web.config может пройти несколько минут, прежде чем application_end будет запущен.

an phu 02.12.2011 00:30

С точки зрения @anphu, когда приложение перезагружается из-за изменения конфигурации (или изменения DLL), часто бывает период времени, когда и старый экземпляр приложения, и новый экземпляр приложения работают бок о бок, когда старый экземпляр заканчивает обработку своих существующих запросов; это красиво объяснено в odetocode.com/articles/305.aspx - хорошее чтение по этой теме

Tao 28.03.2014 13:15

Будет ли вызвано завершение работы приложения, если я удалю веб-приложение из командной строки, которое было установлено с помощью пакета msi?

OldSchool 24.01.2018 20:03

@YakRangi - я так считаю, поскольку процесс удаления потребует завершения работы и удаления экземпляра веб-приложения из IIS.

Dillie-O 26.01.2018 17:02

@ Dillie-O Я тестировал это, но у меня есть странное наблюдение. В моем Application_End мне нужно вызвать службу WCF. Иногда он может вызвать его, в другой раз выдает исключение инициализатора типа. У меня есть ссылка на WCF в другом проекте, а не в самом веб-приложении (где выполняется вызов службы WCF). У меня есть конечные точки службы WCF, настроенные в моем Web.config. Но я не уверен, почему иногда он может звонить, а иногда нет. Я подозреваю, что выгрузка проекта веб-службы (со стороны клиента) и вызов Application_End находятся в гонке? Есть идеи?

OldSchool 28.01.2018 16:11

@YakRangi - где находится служба WCF и почему вам нужно вызывать ее в Application_End. Вообще говоря, это событие не следует использовать для сложных операций, поскольку веб-приложение находится в состоянии «разорвано». Обычно вы используете его для высвобождения локальных ресурсов, которые могут использоваться.

Dillie-O 29.01.2018 03:30

@ Дилли-О Да, ты прав. Но наше требование немного иное. В Application_End нам нужно сигнализировать службе, что клиент корректно завершает работу. Сервис находится на той же машине.

OldSchool 29.01.2018 08:25

Application_End запускается при завершении рабочего процесса ASP.NET. Обычно это происходит после настраиваемого периода бездействия или при выключении или перезапуске IIS (или соответствующего пула приложений).

При работе в IIS 6.0 тайм-аут неактивности можно настроить в настройках пула приложений в Internet Services Manager (Тайм-аут простоя на вкладке «Производительность»). В более ранних версиях IIS он может быть установлен в machine.config (idleTimeout в processModel).

Знаете ли вы, есть ли экземпляр, в котором процесс может завершиться без запуска Application_End. Например, я сопоставил общий сетевой ресурс в Application_Start и хочу отключить этот общий ресурс в Application_End. Будет ли какая-нибудь точка, в которой приложение может завершиться без запуска Application_End? Я полагаю, что отключение электричества удовлетворяет этим критериям. А что насчет фатальной ошибки приложения?

crush 28.10.2013 19:57

@crush: да, безусловно, всякий раз, когда процесс завершается «неожиданно», событие не срабатывает; Примеры включают отключение питания / аппаратный сбой, любую ситуацию, когда поток в процессе "зависает" и пул приложений завершается (например, IISReset, если самый длинный запрос занимает более 30 секунд), любой случай, когда кто-то или что-то вручную выполняет "Конец Process »для этого процесса w3wp.exe (например, в диспетчере задач), любой« Force Close »и любой ситуации, когда неуправляемый код вызывает ошибки памяти или другие ошибки на уровне процесса (переполнение стека, GPF и т. д.)

Tao 28.03.2014 12:50

Другие вопросы по теме