Это веб-сайт ASP.NET MVC. Добавляю лог в метод Application_end.

Я знаю, что есть некоторые обстоятельства, при которых будет вызван Application_end, например, повторное использование пула приложений, изменение файла web.config или изменение файла bin. Но моя проблема здесь очень странная. Метон Application_end на моем веб-сайте ASP.NET MVC вызывается много раз почти одновременно.

Вот мой код:

protected void Application_end()
    {
        FileLog.Info("The website is starting to quit...", LogType.Info);
        PersistentService.RunSignal = false;
        //To wait for pesistent action finish
        Task.WaitAll(_tasks.ToArray(), 1000 * 300);
        FileLog.Info("The website finish quit...", LogType.Info);
    }

Вот мой результат журнала: введите описание изображения здесь

Как видите, Application_end вызывается 4 раза за одну секунду. Я предполагаю, что его можно вызвать один раз, если пул приложений будет переработан в это время, но почему 4 раза?

Может ли кто-нибудь помочь? Спасибо.

Изменить: я заметил, что в моем пуле приложений максимум 5 рабочих процессов. Будет ли в конце каждого рабочего процесса вызывать метод Application_end? введите описание изображения здесь

0
Robin Sun 25 Сен 2018 в 08:31

2 ответа

Лучший ответ

Кажется, что он вызывается, когда домен приложения заканчивается, поэтому может иметь смысл, что он вызывается один раз для каждого процесса:

The Application_Start and Application_End methods are special methods that do not
represent HttpApplication events. ASP.NET calls them once for the lifetime of the 
application domain, not for each HttpApplication instance.

Из https://msdn.microsoft.com/en-us/library/ms178473 .aspx

1
kristianp 25 Сен 2018 в 06:25

Вы используете параметр Максимальное количество рабочих процессов = 5 , что означает, что ваше приложение обслуживают до 5 процессов. Когда IIS сбрасывается, все процессы завершаются одновременно.

2
hkutluay 25 Сен 2018 в 05:55