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了~
最近两天在项目中碰到一个很奇怪的问题,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了~
相关文章推荐
- asp.net 中止Global.asax Application_End事件 避免应用程序池回收 定时任务
- 【转】ASP.NET之 关于触发Global.asax Session_End事件的经验
- 关于触发asp.net Global.asax Session_End事件的经验
- 解决Application、Session丢失问题 — ASP.NET Application_End事件
- ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常
- ASP.NET利用Global.asax的Application_Error来记录Exception信息
- 在Asp.Net的Global.asax中Application_Error跳转到自定义错误页无效的解决办法
- asp.net mvc 3.0详细笔记__07__项目文件结构详解_Global.asax
- Asp.Net里面调用Microsoft Excel Application DCOM问题终极解决方法
- ASP.NET 调试出现<%@ Application Codebehind="Global.asax.cs" Inherits="XXX.XXX.Global" Language="C#" %>
- ASP.NET遇到问题---Global.asax
- 用ASP.NET做项目,本本上的系统是XP,网上下载了IIS6,安装完后出现HTTP500问题,解决之.接着出现了浏览页面时跳出登陆框让输用户名及密码,GOOGLE了一下,原来是权限不够,解决方法
- ASP.NET的SEO--- Global.asax和HttpModule中的RewritePath()方法 (2)
- 项目开发中的小问题解决-----asp.net当后台传值到前台方法中 0001变成1 解决方法
- 【转】ASP.NET Global.asax 文件使用方法 - .net
- 解决Asp.net MVC3下Web.config开启Custom Errors后Application_Error不触发问题
- ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常
- ASP.NET的SEO--- Global.asax和HttpModule中的RewritePath()方法
- ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常
- ASP.NET Global.asax 文件使用方法 - .net