1 日に 1 回、複数のサーバーで実行されている ASP.NET MVC4 Web サイトから、レポートを電子メールで送信してもらいたいと考えています。これはかなり一般的なことのように思えますが、私はそれを行うための良い方法を考え出すのに苦労しています.
この作業を行うためにサーバーでタイマーを実行しようとすると、いくつかの理由で問題が発生します。複数のサーバーがある場合は、すべてのサーバーでタイマーを実行します (サーバーがダウンした場合)。それらの間で調整する必要があり、複雑になります。また、バックグラウンド スレッドから Entity Framework 経由でデータベースにアクセスしようとすると、定期的なバックグラウンド スレッドと "フォアグラウンド" コントローラー スレッドの間で DbContext オブジェクトの構築/破棄をシリアル化するためにロック戦略を採用する必要があるという複雑さが加わります。
もう 1 つのオプションは、サーバーでタイマーを実行することですが、タイマー スレッドに、レポートを生成して電子メールで送信する魔法のページへの GET を実行させることです。これにより、データベース アクセスが通常の Controller アクションで発生し、データベースへの他のすべての Controller アクセスでシリアル化されるため、DbContext の問題が解決されます。しかし、複数のタイマーが実行されている可能性があるという問題にまだ悩まされているため、冗長なレポート要求を無視するには、コントローラー アクションにスマートが必要です。
助言がありますか?この種のことは通常どのように行われますか?