如何延长web应用程序的存活时间,以保证httpmodule里定时任务能一直执行
在httpmodule里写了一段代码,主要是通过timer定时执行任务。
如果页面长时间没人访问了,web应用程序被回收了,这个定时执行的任务就挂掉了。
有没有办法能将这个回收的时间延长,比如说调成24小时?以保证web定时任务的执行。
------解决方案--------------------
------解决方案--------------------对于定时执行任务之类的,最好不要放在web程序里,那是很糟糕的事情,因为这样会占用资源,iis为什么会要去回收?就是了尽可能减少没用的资源。提供更多的资源给外部访问线程。
------解决方案--------------------你这样设计绝对使不合理的,在httpModule里设置定时器,那么每一个web请求,都要通过Module,难道都要挂起24小时,这样没几个请求你的服务器就挂了。。这样太浪费资源了。。 你可以采用其它方式实现啊,比如Winservice定时调用你网站的webservice来实现
------解决方案--------------------
------解决方案--------------------lz的专研精神让人佩服,但很明显的是方向上出了点问题
asp.net和基于iis和http协议的,那么其受iis应用程序池的控制,受http这个无连接协议的控制
如果单纯考虑http协议,http是无连接滴,又不能时时刻刻保证有人访问,那么可能的解决方法是 新开一个线程,然后在这个新线程的里去做你要做的事情,就能很好解决你最早的那个time out问题
但是asp.net同时受iis管控,asp.net的执行实际是在iis程序池里管控滴,相当于是应用程序池进程下的某个线程
而应用程序池是定时重启滴,不知道你观察过iis和进程的关系没有,如果有人访问某个站,iis会启动w3wp.exe去开启一个新的进程,同时去启动某个线程,并在线程里运行该站的实际代码。如果你仔细观察一下回收应用程序池时的进程状态,你回发现,在那一瞬间实际iis是重启开启了一个新的w3wp.exe进程,然后关闭原来w3wp.exe进程。现在就能很好解释你后面那个readonly的问题了,进程都已经变了,你认为那个readonly 还能起效吗?
所以:你实际要选择的事情是
1.要能脱离http无状态的限制,保证你时时刻刻运行
2.要能脱离iis管控,一直保持自己的进程
呵呵,再看这两个要求不是window serviecs是啥??