ASP. NET 项目中的 【Global.asax】 的 【Application_End】方法 触发问题
最近两天在项目中碰到一个很奇怪的问题,Asp.net 项目中【Global.asax】中的【Application_End】总是莫名其妙的被触发了,导致网站出现一堆奇怪的问题,在google里研究了老半天,最后还是经过“潘哥”的指导解决了这个问题,“潘哥” 微博地址。
在网查看了很多资料,主要说以下2种情况会触发【Application_End】(亲测确实如此)
1.修改了web.config
2.修改了bin目录下的文件
问题是我的项目中绝对木有修改web.config和bin目录,可就是触发了【Application_End】,百思不得其的时候,“潘哥”从StackOverFlow上找到一个帖子里面有写的触发【Application_End】的新方法,而且帖子中的问题几乎我的问题一样,哈哈,太好了。
StackOverFlow帖子内容如下:(翻译的不好请见谅)
1) 新建一个网站项目到 c:\projects\restart-demo
2) 添加默认的 web.config 和一个测试页面 text.aspx
3) 映射IIS站点到目录 c:\projects\restart-demo
4) 使用性能监视器,健康监测监控,跟踪 global.asax Application_End
5) 在浏览器中请求页面 http://localhost/test.aspx 【global.asax】中的 【Application_Start】被触发
6) 新建一个文件夹 c:\projects\restart-demo\asdf 【global.asax】中的 【Application_End】被触发
7) 再次在浏览器中请求页面 http://localhost/test.aspx 【global.asax】中的 【Application_Start】被触发
8) 重命名文件夹 c:\projects\restart-demo\asdf 为 c:\projects\restart-demo\asdf1 【global.asax】中的 【Application_Start】被触发
【测试完成】
我们使用一个后台内容管理系统去生成【文件】和【文件夹】在ASP.NET网站中,用户能 增/删/改/上传 文件到网站上,我们注意到一个问题:
当用户 创建、重命名、删除 一个文件夹时,他引起 App Domain 重启了,导致 session、cache 等等全部丢失。
请注意,他并不是一个特殊的文件夹,比如:/bin /App_Code ,有什么途径来防止这个问题吗?
这个问题妨碍网站正常运行有2个原因:
1.当网站重启时,Cache 被销毁了
2.当网站重启时,App domain 需要被重新创建
以上就是帖子中楼主的问题,1楼给出的方法比较强悍,直接禁用网站的监听功能,贴子中还有其他的一些方法,大家可以去原帖看看。
http://stackoverflow.com/questions/2248825/asp-net-restarts-when-a-folder-is-created-renamed-or-deleted
我根据的帖子中楼主的方法自己也测试了一下,发现结果和他并不一样,我只有在删除文件夹时,才会触发【Application_Start】,其他操作时并无影响。
点击下载测试项目,大家也可以自己下载下来试一下。
我的测试结果如下:
2012-11-08 11:16:05.986 Application_BeginRequest
2012-11-08 11:16:05.986 Application_AuthenticateRequest
2012-11-08 11:16:05.987 Page_Load(第一次加载页面)
2012-11-08 11:16:18.739 Application_BeginRequest
2012-11-08 11:16:18.739 Application_AuthenticateRequest
2012-11-08 11:16:18.740 Page_Load
2012-11-08 11:16:18.742 Button1_Click(新增文件)
2012-11-08 11:16:23.077 Application_BeginRequest
2012-11-08 11:16:23.078 Application_AuthenticateRequest
2012-11-08 11:16:23.078 Page_Load
2012-11-08 11:16:23.080 Button2_Click(新增文件夹)
2012-11-08 11:16:32.542 Application_BeginRequest
2012-11-08 11:16:32.543 Application_AuthenticateRequest
2012-11-08 11:16:32.544 Page_Load
2012-11-08 11:16:32.546 Button3_Click(删除文件)
2012-11-08 11:16:39.020 Application_BeginRequest
2012-11-08 11:16:39.020 Application_AuthenticateRequest
2012-11-08 11:16:39.021 Page_Load
2012-11-08 11:16:39.022 Button4_Click(删除文件夹)
2012-11-08 11:16:39.025 Session_End
2012-11-08 11:16:39.045 Application_End
由上面结果可以很直观的看出,只有删除web站点中的【文件夹】时,才会触发【Application_End】,
而我的问题也正是因为删除了web站点中的【文件夹】导致 app 重启,从而使session丢失引起的。所以不删文件夹就ok了~
欢迎关注新浪微博:http://weibo.com/605494869