我需要在我的web應用程序中運行任務。我一直在閱讀,大部分答案都是在Windows中使用任務調度程序,但我需要的是將其放在Web應用程序本身中。任務計劃程序IIS端與C#
我終於得到的東西,幾乎工程,但我仍然有一些麻煩:
using System;
using System.Timers;
using System.IO;
namespace ServiceIIS
{
public static class Servicios
{
public static bool serviceStarted = false;
static Timer serviceLoad = new Timer();
public static void serviceLoader()
{
if (!serviceStarted)
{
GC.KeepAlive(serviceStarted);
GC.KeepAlive(serviceLoad);
serviceStarted = true;
double Intervalo = loadData();
serviceLoad.Interval = Intervalo;
serviceLoad.Elapsed += new ElapsedEventHandler(serviceLoad_Elapsed);
serviceLoad.Enabled = true;
}
}
static void serviceLoad_Elapsed(object sender, ElapsedEventArgs e)
{
serviceLoad.Stop();
double Intervalo = loadData();
serviceLoad.Interval = Intervalo;
serviceLoad.Start();
}
static double loadData()
{
string dailyLoadTime = "00:00:00";
string log = "";
/*
loadData Code
log = resultMessage;
*/
using (StreamWriter w = File.AppendText("c:\\log.txt"))
{
writeLog(log, w);
w.Close();
}
return (Convert.ToDateTime(DateTime.Today.ToString("yyyy-MM-ddT") + dailyLoadTime).AddDays(1) - DateTime.Now).TotalMilliseconds;
}
public static void writeLog(string resultMessage, TextWriter w)
{
w.Write("\r\nLog : ");
w.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(),
DateTime.Now.ToLongDateString());
w.WriteLine(" :");
w.WriteLine(" :{0}", resultMessage);
w.WriteLine("-------------------------------");
w.Flush();
}
}
}
的ServiceLoader()將被調用,如果serviceStarted是假的,那麼我告訴垃圾收集器忽略serviceStarted和serviceLoad是清洗。 第一次調用loadData()以獲取數據並「生成」定時器等待的時間間隔,直到再次調用loadData()。然後我創建事件處理程序並啓動計時器。
使用writeLog()過程我知道何時loadData()被調用。等待它應該被調用的時間(00:00:00小時),沒有調用loadData(),但直到不同的時間......這可能是因爲我計算間隔的方式並不完全正確。
然後它被再次調用當天和第二天。最後在第二天之後,根本沒有調用loadData(),所以我想這是因爲垃圾收集器刪除它,再次調用serviceLoader(),同時調用loadData()告訴我,實際上serviceStarted已經已經清理過,並且確實已經加載了。
你對我做錯了什麼有什麼想法,我怎麼能得到這個工作?我無法相信有沒有辦法使用IIS來做到這一點。
預先感謝您的閱讀時間。
長老
在IIS中沒有強大的方法來執行此操作 - 應用程序池/進程會多次重新加載。有配置選項,但基本上如果IIS確定它是必要的,它會卸載你的appdomain /進程並重新加載它! – Yahia 2012-03-12 16:22:29
即使應用程序正在使用,這種情況會發生嗎?應用程序將幾乎整天都在使用,並且loadData應該在晚上進行初始化。無論如何,IIS會重新加載serviceLoad清理? – Elder 2012-03-19 16:00:16
YES - 即使正在使用應用程序,也會這樣... – Yahia 2012-03-19 16:13:59