C# 因IIS回收导致定时器失效的解决方案

  1. 修改IIS设置
    1. 关闭闲置超时,设置为0.
    2. 关闭固定时间回收,改为特定时间回收.每天凌晨1-2点回收一次.
  2. 在iis回收应用池时重启网站.

     void Application_End(object sender, EventArgs e)  
     {  
       //下面的代码是关键,可解决IIS应用程序池自动回收的问题  
       System.Threading.Thread.Sleep(1000);  
       //触发事件, 写入提示信息  
       LogHelper.WriteInfoLog("触发Application_End事件,正在重新启动网站:" + DateTime.Now);  
       //这里设置你的web地址,可以随便指向你的任意一个页面甚至不存在的页面,目的是要激发Session_Start  
      
       //使用您自己的URL  
       string url = "你的网址";  
       System.Net.HttpWebRequest myHttpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);  
       System.Net.HttpWebResponse myHttpWebResponse = (System.Net.HttpWebResponse)myHttpWebRequest.GetResponse();  
       System.IO.Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流  
      
     }  
    

(理论上到这一步就完美了.为了防止意外所以有第三步.可选)

  1. 加入win定时任务.利用curl启动网站.

    1. 下载curl https://curl.haxx.se/download.html
    2. 设置定时任务,每5分钟调用curl访问网站页面.