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





Событие application_end в первую очередь возникает при перезапуске пула IIS или при выгрузке самого приложения. Еще одна вещь, которую следует отметить, что изменение зависимого файла (скажем, web.config) приведет к перезагрузке приложения, что приведет к срабатыванию события application_end, когда оно закрывается.
Следует отметить, что единственный обнаруженный мной случай срабатывания события завершения приложения при истечении времени ожидания последнего сеанса пользователя содержится в какой-то старой документации, датированной 2001 годом. Я не уверен, что эти критерии по-прежнему применяются.
Я заметил, что при изменении web.config может пройти несколько минут, прежде чем application_end будет запущен.
С точки зрения @anphu, когда приложение перезагружается из-за изменения конфигурации (или изменения DLL), часто бывает период времени, когда и старый экземпляр приложения, и новый экземпляр приложения работают бок о бок, когда старый экземпляр заканчивает обработку своих существующих запросов; это красиво объяснено в odetocode.com/articles/305.aspx - хорошее чтение по этой теме
Будет ли вызвано завершение работы приложения, если я удалю веб-приложение из командной строки, которое было установлено с помощью пакета msi?
@YakRangi - я так считаю, поскольку процесс удаления потребует завершения работы и удаления экземпляра веб-приложения из IIS.
@ Dillie-O Я тестировал это, но у меня есть странное наблюдение. В моем Application_End мне нужно вызвать службу WCF. Иногда он может вызвать его, в другой раз выдает исключение инициализатора типа. У меня есть ссылка на WCF в другом проекте, а не в самом веб-приложении (где выполняется вызов службы WCF). У меня есть конечные точки службы WCF, настроенные в моем Web.config. Но я не уверен, почему иногда он может звонить, а иногда нет. Я подозреваю, что выгрузка проекта веб-службы (со стороны клиента) и вызов Application_End находятся в гонке? Есть идеи?
@YakRangi - где находится служба WCF и почему вам нужно вызывать ее в Application_End. Вообще говоря, это событие не следует использовать для сложных операций, поскольку веб-приложение находится в состоянии «разорвано». Обычно вы используете его для высвобождения локальных ресурсов, которые могут использоваться.
@ Дилли-О Да, ты прав. Но наше требование немного иное. В Application_End нам нужно сигнализировать службе, что клиент корректно завершает работу. Сервис находится на той же машине.
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: да, безусловно, всякий раз, когда процесс завершается «неожиданно», событие не срабатывает; Примеры включают отключение питания / аппаратный сбой, любую ситуацию, когда поток в процессе "зависает" и пул приложений завершается (например, IISReset, если самый длинный запрос занимает более 30 секунд), любой случай, когда кто-то или что-то вручную выполняет "Конец Process »для этого процесса w3wp.exe (например, в диспетчере задач), любой« Force Close »и любой ситуации, когда неуправляемый код вызывает ошибки памяти или другие ошибки на уровне процесса (переполнение стека, GPF и т. д.)
Я удалил свой ответ о том, что Application_End срабатывает только при закрытии веб-сайта. Однако несколько минут исследования дали противоречивую информацию по этому вопросу, и я не хочу, чтобы меня отвергали за неправильный ответ.