1

購入日から 12 か月後に顧客に通知メールを送信する最も簡単な方法は何ですか?

私たちの Web サーバーは、SQL Server に接続された ASP.NET MVC 3 Web サイトを実行しています。現在、期限切れのユーザーに通知する Web ページを毎週月曜日に手動で実行しています。

これまでのところ、私が考えているオプションは次のとおりです。

  1. タスク スケジューラを使用して Web ページを毎日実行する
  2. タイマーを継続的にチェックし、最終的に通知を送信するコンソール アプリケーションを構築する
  3. 2) のような Windows サービスを構築し、障害が発生した場合に自動的に再起動できるようにします。

もっと簡単なものがありませんか?

ありがとう。

4

1 に答える 1

0

前の会社で同じ問題を抱えていました。最後に、タスク スケジューラに行きました。主な理由は、タスク スケジューラが Windows で反復的なタスクを処理するための標準的なメカニズムであるため、他のオプションよりも将来的に保守しやすいためです。

タスク スケジューラによって毎日実行されるコンソール アプリは、「スマート」になるように設計されています。スマートとはつまり。

  • コンソール アプリは、WCF サービスを呼び出すダミー アプリケーションでした。すべてのロジックは WCF サービス内にありました。その理由は、すべてのコードを同じ場所に保持するためでした。
  • 実行に失敗すると、システム ログにアラームが書き込まれます (毎日チェックされ、DB テーブルでした)。壊滅的な障害 (DB へのアクセスなし) の場合、コンソール アプリ ディレクトリのファイルに書き込みました。
  • すでに処理中の場合、2 番目のインスタンスの実行は許可されませんでした (ある種のシングルトン)。
  • どのメールが送信されたかをDBで追跡するため、同じ日に2回実行した場合、最初のメールのみが送信されます。
  • /whatifパラメータがありました
  • 電子メールが失敗した場合、ログに記録され、プロセスが続行されました。
  • 複数の電子メールを送信する必要があり、ある時点で失敗した場合、次の実行は停止した時点から再開されます。

内部的には、コードは次のようなものでした

Linq to get all the users that deserved an email
For each user
  Send the email, mark it as sent in DB and close transaction
  If email fails Write to log.
Next
Write log with stats

この方法は遅くなりましたが、より安全でした。4000 人のユーザーにメールを送信する必要があり、ユーザー 1337 で失敗した場合、何が起こったかのログがあり、次に実行されると 1338 から再開されます。

あるフォルダーのシステムログには、通常、次のようなエントリが毎日ありました。

電子メール プロセスは、スケジューラによって 02:00 に開始されました。4000通のメールが送信され、0通が失敗しました。

何かが失敗した場合:

電子メール プロセスは、スケジューラによって 02:00 に開始されました。3999 通のメールが送信され、1 通が失敗しました。ユーザー xxxxx への電子メールに失敗しました。理由: メールアドレス「joeBlogs@@gmail.com」が正しくありません。

于 2013-04-10T12:13:26.317 に答える