2012-01-11 58 views
1

在我正在開展的項目中,用戶可以訂閱課程。課程的持續時間是可變的,以周計算(如此4,5或6周)。他們可以在任何時候訂閱,因此每個用戶的開始日期不同。選擇用戶發送每週更新

現在我想在每週的開始時向用戶發送一封個性化的電子郵件(所以當他們進入第2周,第3周等時)。該電子郵件每週都有所不同。

我知道我必須定期編寫一個任務和時間表,但我不知道應該如何選擇正確的用戶。我可以編寫一個SQL命令,選擇開始日期爲7,14,21或28天前的所有用戶,並計算他們所在的星期,但似乎很容易出錯(如果任務失敗,那麼他們將不會在下一個任務週期中收到消息)。

什麼是最好的方法來實現這一目標?

該項目是C#中的ASP.NET MVC應用程序,在IIS上使用NHibernate。

+1

「如果任務失敗,那麼他們將不會在下一個任務循環中收到消息」如果您想自動恢復,那麼您應該選擇在過去28天內啓動的所有用戶,即使它不完全是7 ,然後登錄一個單獨的表格「在Y日發送用戶電子郵件X」,然後檢查是否有未完成的電子郵件發送。或者製作該手冊:發送任何失敗的管理員警報,然後介入並在當天進行修復。 – Rup 2012-01-11 15:56:59

回答

1

您正在討論在未來日期和時間發生的計劃工作流程。這最好由調度程序處理。

從概念上說,您定義了需要完成的工作以及需要完成的時間。如果在IIS中託管此過程的站點上沒有用戶,則IIS將關閉該網站並不是一個好主意。一個Windows服務將是一個更好的選擇。這樣它總是運行準備執行命令的背景。

調度器的實現可能很簡單,只需將操作存儲在數據庫中並按定時間隔查詢數據庫,執行應該發生的任務。

另一種選擇是將調度框架集成到您的服務中,如quartz.net

編輯: 你目前的設想是一個隱含的定義,應該發生什麼。換句話說,在發送提醒時,您會計算何時以及應該通知誰。

改爲在使用課程註冊時計算這些值,並將其保存爲顯式事件。你需要的一切已經存儲在事件中,剩下的就是確定事件應該發生的事情。這應該很容易:任何應該已經解僱但沒有解決的事件。一旦它引發刪除事件。

+0

Thanx爲您的答覆,但我的主要問題是關於用戶的選擇,而不是調度部分。但是,設置Windows服務確實比IIS過程更好。對於鏈接到Quartz的thanx看起來很有趣。 – Pbirkoff 2012-01-11 16:23:10

+0

我最終在編輯中使用了您的建議。謝謝 – Pbirkoff 2012-05-30 14:19:12