2012-01-11 11 views
1

私が取り組んでいるプロジェクトでは、ユーザーはコースに登録することができます。コースの期間は可変で、週単位で計算されます(4,5,6週間)。任意の瞬間に購読できますので、開始日はユーザーごとに異なります。週間更新を送信するユーザーを選択してください

今週は、毎週の初めにパーソナライズされたメールを送信したいと思っています。電子メールは毎週異なります。

私はタスクを作成し、定期的にスケジュールする必要があることは知っていますが、正しいユーザーをどのように選択すべきかはわかりません。私はSQLコマンドを書いて、開始日が7,14,21、または28日前のすべてのユーザーを選択し、それらが何週目かを計算することができますが、これはかなりエラーが発生するようです(タスクが失敗した場合彼らは次のタスクサイクルでメッセージを受信しません)。

これを達成するにはどうすればよいでしょうか?

このプロジェクトは、IIS上でNHibernateを使用しているC#のASP.NET MVCアプリケーションです。

+1

「タスクが失敗した場合は、次のタスクサイクルでメッセージを受信しません」自動的に回復する場合は、正確には7でなくても過去28日間に開始したすべてのユーザーを選択する必要があります別のテーブル「ユーザEのメールXを日付Yに送信」にログインし、未送信のEメールがあるかどうかを確認します。または、マニュアルを作成してください。何らかの障害が発生した場合に管理者にアラートを送信し、その日に入り、修正してください。 – Rup

答えて

1

あなたは、将来の日時に実行されるワークフローのスケジューリングについて話しています。これはスケジューラによって最もよく処理されます。

概念的には、何を行う必要があるか、いつ実行する必要があるかを定義します。 IIS内でこのプロセスをホストしているユーザーがいない場合は、IISがWebサイトをシャットダウンすることはお勧めできません。 Windowsサービスがより良い選択となります。そのようにして、常にコマンドを実行する準備ができているバックグラウンドを実行しています。

スケジューラの実装は、データベース広告にアクションを保存して、時間間隔でデータベースにクエリを送信し、発生したはずのタスクを実行するのと同じくらい簡単です。

別のオプションは、quartz.netのようなサービスにスケジューリングフレームワークを統合することです。

編集: 何が起こるべきかの暗黙の定義です。言い換えれば、リマインダが送信された時点で、いつ通知を受け取るべきかを計算します。

代わりに、使用がコースの登録時にこれらの値を計算し、これを明示的なイベントとして保存します。必要なものはすべてイベントに既に保存されています。残っていることは、どのイベントを発生させるべきかを決定することだけです。すでに解雇されていたはずのイベントではありません。それが発生するとイベントを削除します。

+0

あなたの返信はありがたいですが、私の主な問題は、スケジューリングの部分ではなく、ユーザーの選択です。しかし、Windowsサービスを設定することは、実際にはIISプロッセージよりも良いアイデアです。 Quartzへのリンクについては、面白いようです。 – Pbirkoff

+0

私は最終的にあなたの編集にあなたの提案を使用しました。ありがとう – Pbirkoff

関連する問題