解决.net定时器在iis7上不执行问题

时间:2021-09-05 23:23:45

今天第一次在博客园发帖,以前一直在潜水,在这里也是学了不少东西。感谢各位园友

废话不多说,这也是我工作中遇到的问题:

protected void Application_Start(object sender, EventArgs e)
{
// 创建一个计时器,单位:毫秒
System.Timers.Timer myTimer = new System.Timers.Timer(60*60*1000); //设置时间为5秒,便于测试(单位毫秒)
myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Elapsed);
myTimer.Enabled
= true;
myTimer.AutoReset
= true;
}
//计时器方法
protected void myTimer_Elapsed(object source, System.Timers.ElapsedEventArgs e)
{
//可以设置时间点执行
if (DateTime.Now.Hour != 1)
{
return;
}
}

 

在Global.asax文件中创建了定时器,时间设置在晚上一点执行方法,测试的时候将时间改为5秒是正常运行没问题的,正式使用的时候确没见到效果,后来发现是方法根本没有执行

通过网上查找资料发现是iis的进程回收机制导致,当程序闲置时间超过20分钟(iis默认是20分钟),进程将会被回收,这样方法就不会执行了,解决办法暂时有两个,一、iis配置,打开发布在iis上的网站应用池,查看属性,修改闲置超时(一般改为1440)这样就可以了,二、在服务器上挂一个该网站的页面,加一段定时刷新的js(一般20分钟),这样不让网站闲置也可以解决进程回收的问题