假設我有一個運行方法來生成報告的Windows服務。更好的方法來排隊報告
例如說我有了,報告路徑,狀態報告的名稱的報告表中的參數等
當用戶點擊生成報告按鈕,一個新的條目將被添加到表格中帶排隊狀態。該服務將採用排隊報告,生成報告,更新狀態並設置完成報告的路徑。
2種方式我能想到這樣做的是要麼輪詢排隊報告表(類似):
TimerCallback callback = new TimerCallback(RunQuery);
this.QueryTimer = new Timer(callback, null, 1000, 10000);
public void RunQuery(object obj)
{
//find reports with status of queued,
//loop through them and generate reports
}
或者創建具有ReportId文件,並使用FileSystemWatcher的,以確定哪些報告給運行(類似):
private void FileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
{
ReportStack.Push(e.FullPath);
Thread TR = new Thread(RunQuery);
TR.Start();
}
public void RunQuery()
{
string filePath = Convert.ToString(ReportStack.Pop());
GenerateReport(filePath);
...
}
一個缺點一號方法是,我需要指定一個輪詢時間,因爲他們排隊報告沒有瞬間產生。第二種方法的缺點是創建和刪除文件,設置應用程序的權限以寫入共享文件夾等等的麻煩。
是否有辦法讓服務自動啓動報告,因爲它們是放入報告表(類似DatabaseTableWatcher!)或另一種更好的方式來做到這一點?
你考慮過sql server通知服務嗎? http://www.codeproject.com/KB/dotnet/sqlns.aspx – Pleun 2011-12-20 13:24:02
@Pleun沒有被CEP取代(我對此一無所知!)?該codeproject頁面是從2002年http://blogs.msdn.com/b/hovsep/archive/2009/08/23/notification-services-has-died-welcome-sql-server-2008-r2-complex-event- processing-cep-technology.aspx – woggles 2011-12-20 18:09:52