您的位置:首页 > 移动开发

ASP. NET 项目中的 【Global.asax】 的 【Application_End】方法 触发问题

2012-11-08 07:09 381 查看
重要说明:本博已迁移到 石佳劼的博客,有疑问请到 文章新地址 留言!!!

最近两天在项目中碰到一个很奇怪的问题,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了~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐