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

劼哥stone
博客专家认证
2012-11-08 01:18:02
最近两天在项目中碰到一个很奇怪的问题,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
...全文
545 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanwushu 2014-01-24
  • 打赏
  • 举报
回复
重装了一遍iis6,问题竟然解决了!!看样子并不是代码的问题,而是服务器的某些地方设置导致的。
yanwushu 2014-01-22
  • 打赏
  • 举报
回复
开发项目过程中,遇到session异常。在global中的session_end事件中添加日志,发现这个事件总是被莫名的触发,看到这个帖子,但是我的项目中并没有删除或者添加目录呀??至今没有找到原因,求助!!!
劼哥stone 2012-12-05
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
引用 楼主 shi0090 的回复:当用户 创建、重命名、删除 一个文件夹时,他引起 App Domain 重启了,导致 session、cache 等等全部丢失。 请注意,他并不是一个特殊的文件夹,比如:/bin /App_Code ,有什么途径来防止这个问题吗? 这个问题妨碍网站正常运行有2个原因:如果你想做一个称职的asp.net程序员,请记住这个规范:作……
不好意思了,今年才做的asp.net程序员,还有一些基础知识掌握的不好,只能慢慢学习了,谢谢指导。
宝_爸 2012-12-05
  • 打赏
  • 举报
回复
学习了。。。。。。
  • 打赏
  • 举报
回复
你随便删除网站下除app_data以外的一个文件夹,应用程序就重启了。这是我们都知道的,就少数人不知道。
  • 打赏
  • 举报
回复
引用 楼主 shi0090 的回复:
当用户 创建、重命名、删除 一个文件夹时,他引起 App Domain 重启了,导致 session、cache 等等全部丢失。 请注意,他并不是一个特殊的文件夹,比如:/bin /App_Code ,有什么途径来防止这个问题吗? 这个问题妨碍网站正常运行有2个原因:
如果你想做一个称职的asp.net程序员,请记住这个规范:作为数据的文件以及子目录要建立在 app_data 目录下。 这个是入门时必须知道的,怎么你会不知道呢?
劼哥stone 2012-12-01
  • 打赏
  • 举报
回复
自己顶一下~帮助大家~
蝶恋花雨 2012-11-08
  • 打赏
  • 举报
回复
nice 收藏。
心灵彩虹 2012-11-08
  • 打赏
  • 举报
回复
欢迎分享,jf.

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧