レポートを生成する方法を実行するWindowsサービスがあるとします。例えばレポートのキューイング方法の改善
は、私がレポートのレポートパス、ステータス、名前を持つレポートのテーブルを持っていると言う、パラメータなど
ユーザーが新しいエントリを持つテーブルに追加されます生成するレポート]ボタンをクリックする
キューに入れられた状態。このサービスは、キューに入れられたレポートを取得し、レポートを生成し、ステータスを更新し、完了したレポートのパスを設定します。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を使用します。
私はこれをやって考えることができます2つの方法がキューイングされたレポート(のようなもの)のためにテーブルをポーリングのいずれかにあります(のようなもの)を実行します。
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);
...
}
第一の方法の欠点は、私がポーリング時間を指定する必要があり、それらがキューに入れられるようレポートが瞬時に生成しないということです。 2番目の方法の欠点は、ファイルの作成と削除、共有フォルダーへの書き込みの許可の設定などの小さな手間です。
サービスを自動的に開始する方法はありますかレポートテーブル(DatabaseTableWatcherのようなもの)に置くか、これを行うもう1つのよりよい方法ですか?
SQL Server通知サービスはありますか? http://www.codeproject.com/KB/dotnet/sqlns.aspx – Pleun
@PleunこれはCEPでsuperseededされていない(私はについて何も知りませんか!)?その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