HttpModule的Dispose被意外执行

youcx2010 2014-05-20 04:33:39
本人有写了一个HttpModule,里面有一个计时器会定时同步服务器数据,在HttpModule的Dispose中会对计时器执行Dispose
代码写好,发布。测试也OK 可以同步数据。
可是给其他同事用的时候发现问题了,HttpModule只会在前两次同步(我计时器是30s执行一次),就再也不同步了,后来调试发现时HttpModule的Dispose被意外执行了。
上网找了很多资料,得出的结论是dispose只有在程序池被回收或者程序重启、关闭的时候才会执行。
没办法自己测试,发下如下规律
如果直接站点访问(不带具体页面) HttpModule的Init方法会被执行4次 dispose会被执行2次,dispose发生的时间大概是在1min中之后,间隔30s会再次发生,具体发生时间和站点是否被访问有关
但是如果站点从来没被直接用站点访问(带页面)的话,init只会被执行两次,而dispose就不会发生
下面是我测试跟踪是的页面输出:带页面和不带页面
带页面的
不带页面
HttpModule的代码
class TestModule:IHttpModule
{
public void Dispose()
{
loger.Instance.list.Add(DateTime.Now + ":Module.Dispose");
}

public void Init(HttpApplication context)
{
loger.Instance.list.Add(DateTime.Now + ":Module.Init");
context.BeginRequest += new EventHandler(ContextBeginRequest);

}

public void ContextBeginRequest(object sender,EventArgs e)
{
loger.Instance.list.Add(DateTime.Now + ":Module.Application_BeginRequest");
}
}

跟踪信息记录类
 public class loger
{
private static volatile loger _instance;
private static readonly object obj = new object();

public List<string> list;
private loger()
{
list = new List<string>();
}

public static loger Instance
{
get {
if (_instance == null)
{
lock (obj)
{
return _instance = new loger();
}
}
return _instance;
}
}
}

求大神帮忙
...全文
96 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
youcx2010 2014-05-23
  • 打赏
  • 举报
回复
大神不要捉迷藏了,快来帮忙解决问题啊
youcx2010 2014-05-20
  • 打赏
  • 举报
回复
自己顶,看的人都没有吗

62,046

社区成员

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

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

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

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