【原创】ASP.NET中Application_Start“多次运行”的问题

最近发现平台有时候会发出重复邮件出来,最后发现是Application_Start“多次运行”在作怪,这里的“多次运行”我打了个引号,其实并不是多次运行,请看缘由:

发现问题是由于重复发邮件才查出来的,平台发邮件是先把邮件内容插入到数据中的一张表中,Application_Start事件中挂了一个线程,这个线程负责把数据表中需要发送的邮件内容发出去,发现重复发邮件后,查了表里的数据是没有重复的,问题就出在线程上,于是把原来的程序写上日志(以前没写日志,代码比较LJ),顺便整理了一下代码,查日志的时候,发现Application_Start事件中写了重复日志,Application_Start事件被多次运行,这样就会挂两个线程在服务器上,两个线程在取数据表中的数据时会出现“打架”现象,难怪会重复发邮件。但查到了问题关键点,却不知道为什么会出现,于是进一步查原因。

打开服务器上的IIS,突然想起来,前段时间在服务器上新建了一个端口,对应的程序目录与现在的平台目录一样,下图的DDS2008所示,这样的话就是两个应用程序,同样的程序代码,连接也是同样的数据库,所以就会出现Application_Start“多次运行”的问题,其实是两个应用程序分别的Application_Start,并非真正的多次运行。

image

而这两个应用都需要保留,总不可能搞两套代码吧,要能在Application_Start时判断是哪个端口就好,这样就能根据端口号来决定是不是要挂线程,但Application_Start中不能取得端口号,于是在网上查了资料,发现有一篇文章了解决这个问题的办法:Request is not available in this context,实际上他是不用Asp.net内置的Application_Start,而是另建了一个APPStart类来实现。借助此方法,问题得到完美解决。

posted @ 2012-03-07 10:28  一 缕 阳 光  阅读(3060)  评论(1编辑  收藏  举报