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

首先不要设置iis自动回收,一般设置凌晨1-2点左右回收一次,当凌晨iis回收应用程序池的时候,会调用Application_End,执行里面的代码,

重新启动网站,建议定时器的代码放在Session_Start里面,因为

Application_Start只有再第一个用户访问网站的时候才会触发该方法,通常会在该方法里定义一些系统变量,如聊天室的在线总人数统计,

历史访问人数统计的初始化等等均可在这里定义.所以第一次访问的时候会先进入Application_Start,

然后再进入Session_Start。但是以后每次访问的时候进入的是Session_Start

第一个访问网站的用户会触发该方法.

Application_Start()

{

}

//每个用户访问网站的第一个页面时触发;

void Session_Start(object sender, EventArgs e)

{

LogHelper.WriteInfoLog("触发Session_Start事件,准备执行定时任务:" + DateTime.Now);

#region 定时任务

System.Threading.Thread myTimer = new System.Threading.Thread(new System.Threading.ThreadStart(Timer_Write));

myTimer.Start();

#endregion

}

//网站关闭,或重启时,会触发该方法.

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();//得到回写的字节流

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值