解决ASP.NET中GLOBAL中线程自动回收的问题

在ASP.NET中,微软提供了一个叫做GLOBAL的文件,它可以在系统启动后,后台执行相关语句,比较时候后台自动对数据处理。

但是实践中发现,如果该网站经常不被访问的话(默认是30分钟),该GLOBAL线程将被自动回收

因此为了保证程序在相应时间后,后台程序仍在工作,只需要对程序进行如下改造,关键是APPLICATION_END中的改造

ContractedBlock.gif ExpandedBlockStart.gif Code System.Threading.Thread sisThread = null;

void Application_Start(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif
{
        
// 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()
ExpandedBlockStart.gifContractedBlock.gif
{
.
}


void Application_End(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif
{
        
//  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;
 }

 

或者可以参见http://hi.baidu.com/huqing7002/blog/item/fbf19c12273ac0c6c2fd78d4.html

 

注:

笔者经过试验,发现这个方法好像还是不行,到时还是没有启动所需要的程序

因此后来,我们利用WINDOW的TASK操作,定时的开启下IE,然后关闭,从而确保所有的SESSION没有丢失

转载于:https://www.cnblogs.com/lx0831/archive/2009/04/03/1428804.html

你可能感兴趣的:(解决ASP.NET中GLOBAL中线程自动回收的问题)