还是在最近做记录日志功能的测试时发现的问题,我的线程中一直有写日志的任务,但过了一段时间不写了,怎么都想不通。开始也没太注意 asp.net应用程序的生命周期,后在网上查了些资料,才知道是IIS为考虑服务器压力设置的资源闲置过久回收的机制,当网站没有人访问过一段时间就启动 Global.asax 中Application_End事件回收资源。(大致意思是这样的可能我表述的不是很清楚,关于asp.net应用程序的生命周期与Global.asax的一些事件作用请另找资料)
原理:当有第一个人访问时,启动一个定时器,定时模拟客户请求一次网站,定时器间隔时间可以设置小于IIS应用程序池闲置超时时间。
项目的Global.asax.cs页面
public class Global : System.Web.HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
//当有第一个人访问时,启动一个定时器
System.Timers.Timer timer = new System.Timers.Timer();
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Interval = 60000;
timer.Enabled = true;
}
//定时模拟客户请求一次网站
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
string url = "http://localhost:8088/Default.aspx";
System.Net.WebClient client = new System.Net.WebClient();
client.DownloadData(url);
}
}
还有一种方式利用缓存的机制实现的,缓存过期时触发回调事件(http://blog.csdn.net/a497785609/article/details/5941283)说的比较清楚