Application_end事件触发机制

Application_End 事件触发时间/机制

1、回收应用程序池会导致站点重启,记录的原因是如下:

 

1

 

  HostingEnvironment initiated shutdown HostingEnvironment caused shutdown

2、修改应用程序池回收规则会导致重启,记录的重启原因如下:

 

1

 

HostingEnvironment initiated shutdown HostingEnvironment caused shutdown

3、在IIS中修改站点的名字,不会导致重启。 4、修改站点根目录的配置文件web.config,在配置文件注释中添加几个空格会导致重启,记录的重启原因如下,但是修改子目录的web.config文件不一定会导致马上重启。

 

1

 

CONFIG change HostingEnvironment initiated shutdown

5、修改aspx、master文件不一定会导致重启;但是每修改一次都会导致一次重新编译,重新编译次数达到15次之后会导致站点重启,重启原因如下:

 

1

 

Recompilation limit of 15 reached HostingEnvironment initiated shutdown

15次后重启这个数字可以在web.config中做配置,修改compilation的numRecompilesBeforeAppRestart属性值即可。

 

1

 

<compilation debug="false" numRecompilesBeforeAppRestart="15">

6、删除bin目录下的pdb文件,会导致重启,记录的重启原因是:

 

1

 

Change Notification for critical directories.

在bin目录下新建一个空的文件夹,会导致站点重启,重启原因是:

 

1

 

Directory rename change notification for 'D:\projects\TestWebApp\TestWeb'.T estWeb dir change or directory rename

在bin目录下删除空文件夹,会导致站点重启,记录原因是:

 

1

 

Directory rename change notification for 'D:\projects\TestWebApp\TestWeb'.T estWeb dir change or directory rename

7、修改Global.asax文件会导致站点重启,即使加几个空格也会重启,记录的重启原因是:

 

1

 

Change in GLOBAL.ASAX HostingEnvironment initiated shutdown

8、对App_Code目录做修改会导致站点重启,在站点根目录下添加一个名字为App_Code的文件夹,会导致重启,记录的重启原因是:

 

1

 

Change Notification for critical directories. App_Code dir change or directory rename

删除App_Code文件夹会导致站点重启,记录的重启原因是:

 

1

 

  File Change Notification Error in D:\projects\TestWebApp\TestWeb\app_code Change Notification for critical directories.App_Code dir change or directory rename

在App_Code文件夹下面新建或者删除一个cs文件,会导致站点重启,记录的原因是:

Change Notification for critical directories. App_Code dir change or directory rename

9、对关键路径的修改都会导致站点重启,关键路径包括:   bin, App_Code, Web References,App_Browsers,App_GlobalResources,App_LocalResources

总结三方面:一方面是IIS配置发生变化;另一方面是asp.net相关文件配置文件,global文件,aspx,ascx,master等类型的文件发生变法;第三个方面是关键路径bin,app_Code, Web References,App_Browsers,App_GlobalResources,App_LocalResources发生变化。

在Application_End事件中,添加捕捉事件触发的原因:

  protected void Application_End()
        {
            try
            {
                HttpRuntime runtime = (HttpRuntime)typeof(System.Web.HttpRuntime).InvokeMember("_theRuntime",
                                         BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetField, null, null, null);
                if (runtime == null)
                    return;
                string shutDownMessage = (string)runtime.GetType().InvokeMember("_shutDownMessage",
                            BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, runtime, null);
                string shutDownStack = (string)runtime.GetType().InvokeMember("_shutDownStack",
                           BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, runtime, null);
                // 记录日志到本地文件
                LogHelper.CreateErrorLogTxt("ApplicationEnd事件触发:", shutDownMessage,shutDownStack);
            }
            catch (Exception ex)
            {
                LogHelper.CreateErrorLogTxt("ApplicationEnd事件触发异常", ex.Source.ToString(),ex.Message);
            }
        }

我在webApi项目中遇到一个问题,用postman每次发送http请求,程序都会进入Application_Start事件中,刚开始根据VS提示的异常查找,压根就没有方向:

在Application_End中添加捕获,捕获结果如下:

根据这个捕获的结果发现,bin文件夹下有文件更新导致了每次都会进入Application_Start中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值