在IIS上定時執行任務


在Global.asax設置代碼:
void Application_Start(object sender, EventArgs e)

{

    //添加定時器 在應用程序啟動時運行的代碼 這里設置34個小時間隔 122400000 300000

    System.Timers.Timer myTimer = new System.Timers.Timer(122400000);//修改時間間隔

    //關聯事件

    myTimer.Elapsed += new System.Timers.ElapsedEventHandler(AutoExec);

    myTimer.AutoReset = true;

    myTimer.Enabled = true;

}
private void AutoExec(object sender,System.Timers.ElapsedEventArgs e)

{

string filename = (DateTime.Now.ToString() + DateTime.Now.Millisecond.ToString()).Replace("/", "").Replace(":", "").Replace(" ", "") + ".txt";
// string file = "~/img/" + filename;
string file = @"C:\Users\Administrator\Documents\Visual Studio 2013\WebSites\testasax\img" + filename;
string content = "寫入內容!";
if (System.IO.File.Exists(file) == true)
{
// MessageBox.Show("存在此文件!");
}
else
{
System.IO.FileStream myFs = new System.IO.FileStream(file, System.IO.FileMode.Create);
System.IO.StreamWriter mySw = new System.IO.StreamWriter(myFs);
mySw.Write(content);
mySw.Close();
myFs.Close();

}

}

void Application_End(object sender, EventArgs e) 

{

    //  在應用程序關閉時運行的代碼,解決iis自動回收
    //如果出錯,刪除下面代碼

    //下面的代碼是關鍵,可解決IIS應用程序池自動回收的問題

    System.Threading.Thread.Sleep(1000);

    這里設置你的web地址,可以隨便指向你的任意一個aspx頁面甚至不存在的頁面,目的是要激發Application_Start

    string url = "http://www.xxxxx.com";

    string url = "http://localhost:82/111.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();//得到回寫的字節流
    //在此添加其它代碼

}

也可以設置iis線程池,解決自動回收。
夜間或者網站在經過無訪問階段后,后台調度的線程和計算任務都停止了,如果你抓取了Application_End事件,會發現這個事件居然被調用了。

那一定是IIS的應用程序池回收的機制在作怪了。因為IIS的默認設置里面,如果一個站點所處的應用程序池超過一段時間沒有被訪問或者請求,IIS就會自動回收這個程序池,並且把進程殺掉。那Quartz的定時任務也自動停止了。

但是我們可以通過設置應用程序池參數使其不會被簡單的自動回收(有些情況無法避免,比如熱部署的站點,錯誤數量超限等等)

在IIS中找到這個站點所用的程序池,點擊“高級設置...”

在打開的列表中更改以下設置:

回收——固定時間間隔(分鍾) 改為 0

    ——虛擬/專用內存限制(KB) 改為 0

進程模型——閑置超時(分鍾) 改為 0

這樣子,一般情況下程序池就不會被自動回收了,后台Quartz 的定時任務就會正常工作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM