1

这是一个 ASP.NET MVC 网站。我在 Application_end 方法中添加了一些日志。

我知道在某些情况下会调用 Application_end,例如应用程序池的回收、web.config 文件的更改或 bin 文件的更改。但是我这里的问题很奇怪。我的 ASP.NET MVC 网站中的 Application_end 方法几乎同时被奇怪地调用了很多次。

这是我的代码:

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方法? 在此处输入图像描述

4

2 回答 2

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

于 2018-09-25T05:57:39.177 回答
2

您正在使用参数Maximum Worker Process = 5,这意味着最多有 5 个进程为您的应用程序服务。当 IIS 重置时,所有进程同时结束。

于 2018-09-25T05:55:41.627 回答