在ASP.NET中,微软提供了一个叫做GLOBAL的文件,它可以在系统启动后,后台执行相关语句,比较时候后台自动对数据处理。
但是实践中发现,如果该网站经常不被访问的话(默认是30分钟),该GLOBAL线程将被自动回收
因此为了保证程序在相应时间后,后台程序仍在工作,只需要对程序进行如下改造,关键是APPLICATION_END中的改造
CodeSystem.Threading.Thread sisThread = null;
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
System.Timers.Timer myTimer = new System.Timers.Timer(5000);
myTimer.Elapsed += new System.Timers.ElapsedEventHandler(ThreadFunction);
myTimer.Enabled = true;
myTimer.AutoReset = true;
}
private void ThreadFunction()
{
.
}
void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown
LogUtility.Write_CommonLog(
.);
//下面的代码是关键,可解决IIS应用程序池自动回收的问题
System.Threading.Thread.Sleep(1000);
//这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,目的是要激发Application_Start
string url = "http://localhost:80/Login.aspx";
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();//得到回写的字节流
//sisThread.Abort();
//sisThread = null;
}
注:
笔者经过试验,发现这个方法好像还是不行,到时还是没有启动所需要的程序
因此后来,我们利用WINDOW的TASK操作,定时的开启下IE,然后关闭,从而确保所有的SESSION没有丢失