2014-12-19 110 views
0

一般問題MVC5延遲事件

從我的後端代碼我想要觸發事件,將某處等待大約30分鐘,然後運行一些代碼。

鑑於在MVC中產生線程或任務是一個糟糕的主意(因爲池可能會被殺死,並且你不知道事情是否會起作用)。做這個的最好方式是什麼?

我的選項,我看到他們是:

  • 從代碼創建一個線程或任務.. 壞主意如上所述。
  • 在每30分鐘致電一次服務的服務器上創建一個計劃任務(batch/powershell),該服務根據需要進行電子郵件發送。 這對我來說是凌亂的,因爲我現在要依靠這個任務工作
  • 在SQL服務器上創建一個SSIS包,使其與計劃任務幾乎完全相同,但可能更可靠。 可能是最可靠的解決方案,也是###之一中最痛苦的。

你們會做什麼?

現實世界的例子

用戶 「A」,寫在網站上發表評論。用戶「B」和「C」在彼此的5分鐘內都發表評論。我想發送一封電子郵件給用戶「A」關於來自「B」和「C」的新評論,但我不希望他爲每個評論都收到1封電子郵件。可能有成百上千個電子郵件各有1條評論。

所以在我的情況下,我想觸發一個甚至等待30分鐘,然後將所有新評論分組到一個通知電子郵件。

回答

2

這個問題沒有正確的答案,它主要是基於意見的。

就我個人而言,我喜歡#2,它對我來說似乎並不混亂。你可以做一些WorkerRole或WebJob。雲計算對於定時事件和網絡請求(儘管可能不是那麼多,但它在許多應用程序中仍扮演着有意義的角色)同等重要。

我也喜歡#2,因爲它似乎更適合我單元測試,但也許這是因爲我不知道如何編寫針對SSIS包的單元測試。

0

Web服務器不適用於計劃任務。如果沒有請求,服務器會在一段時間後進入休眠狀態。我知道有一些黑客可以做到這一點。但黑客是黑客,我總是喜歡用正確的方式做事。爲此,您需要編寫一些C#應用程序並使用Windows服務來完成作業或SQL Server代理。

0

在我看來,還有另一種選擇。你可以在有Web界面的服務器上公開一些應用程序,這樣你就可以排隊執行一些任務。然後,該應用的內部邏輯可以發送您的電子郵件或做任何你想要的。它不會是MVC Web應用程序,而是一些服務,所以它不會因應用程序池回收或其他任何事情而死亡。