在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没有丢失