2011-12-04 9 views
1

私は現時点では大きなasp.netのWebサイトで作業しています。いくつかのレポートをスケジュールして週に1回または毎月メールで顧客に送信したいと考えています。私は、Windowsサービスを使用し、タイマーを使用することを考えています。これは最善の選択ですか?予定時刻の電子メールレポート

+0

これをReporting Services(SSRS)でタグ付けしました.SSRSがインストールされていますか?これには機能がありますが、オプションとして興味があるかどうかはわかりません。すでにSSRSインスタンスがインストールされている場合は、これを使用してください。そうでなければ、それは価値がないかもしれません。 –

答えて

1

私は個人的にタイマーを使用しませんが、私はWindowsサービスが最良の選択だと思います。

これを処理する方法は、メインサービスの作業ループを1/2秒間アイドル状態にしてから、レポートを実行する必要があるかどうかを確認することです。

この設計では1つの非常に重要な考慮事項:あなたのサービスをクラッシュから単一のレポートを防ぐために、あなたは物事のカップル行う必要があります。

1)は、別のスレッド内のすべてのレポートを実行します(backgroudworkerを使用するか、またはあなたの管理自分のスレッド)。

2)一度に特定の数のレポートのみを開始してください。あなたのループでは、実行中のレポートを追跡し、停止したときに次のレポートを開始します。最大数は、レポートの強度とサーバーの容量によって異なります。

1

あなたはhttp://hangfire.io« からファイア・アンド・フォーゲット、遅れや定期的なタスクのASP.NETアプリケーションの内部 を実行するための簡単な方法をHangfire

説明を使用することができます。 Windowsサービスは必要ありません。永続的なストレージ。 オープンで商用利用のため無料。 »

それはあなたがこのようなタスクをスケジュールしてみましょう:MyReport.Run()レポートをレンダリングし、電子メールで送信するの世話をする静的メソッドである

RecurringJob.AddOrUpdate(() => MyReport.Run(), Cron.Weekly(DayOfWeek.Monday)); 

を。

関連する問題