Asp.net

如何在 ASP.NET MVC 網站上執行定期工作?

  • March 27, 2017

每天一次,我希望我的可能在多個伺服器上執行的 ASP.NET MVC4 網站通過電子郵件將報告發送給我。這似乎是一件很常見的事情,但我很難想出一個好方法來做到這一點。

由於幾個原因,嘗試在伺服器上執行計時器來完成這項工作是有問題的。如果我有多個伺服器,那麼我會在所有伺服器上執行計時器(以防伺服器出現故障);我需要在它們之間進行協調,這變得很複雜。此外,嘗試從後台執行緒通過實體框架訪問數據庫會增加複雜性,即我必須採用鎖定策略來序列化週期性後台執行緒和“前台”控制器執行緒之間的 DbContext 對象的構造/處置。

另一種選擇是在伺服器上執行計時器,但讓計時器執行緒對生成並通過電子郵件發送報告的魔術頁面執行 GET。這解決了 DbContext 問題,因為數據庫訪問發生在正常的 Controller 操作中,與所有其他 Controller 對數據庫的訪問一起序列化。但是我仍然遇到可能執行多個計時器的問題,因此我需要在 Controller 操作中使用一些技巧來忽略多餘的報告請求。

有什麼建議?這種事情一般是怎麼做的?

您不應該在您的 Web 應用程序中執行此任務,因為 Phil Haack 在his blog post.

這種事情一般是怎麼做的?

您可以從 Windows 服務或什至使用 Windows 調度程序定期執行的控制台應用程序執行此任務。

正確的解決方案是創建一個獨立於您的網站執行的後台服務。但是,如果這不是一個選項,那麼您可以使用記憶體,如Jeff Atwood在 ASP.NET 中的簡單後台任務中所解釋的那樣。

引用自:https://stackoverflow.com/questions/15859057