每天一次,我希望我的ASP.NET MVC4網站可能在多臺服務器上運行,以便將報告通過電子郵件發送給我。這似乎是一件很常見的事情,但我想要一個很好的方法來做到這一點很困難。如何在ASP.NET MVC網站上執行定期工作?
嘗試在服務器上運行計時器來完成這項工作有幾個原因是有問題的。如果我有多臺服務器,那麼我會讓計時器在所有服務器上運行(以防服務器故障);我需要在它們之間進行協調,這會變得複雜。此外,試圖通過實體框架從後臺線程訪問數據庫增加了複雜性,我必須採用鎖定策略來序列化週期性後臺線程和「前臺」控制器線程之間的DbContext對象的構建/處置。
另一種選擇是在服務器上運行一個計時器,但讓計時器線程執行一個GET操作,生成一個生成並通過電子郵件發送報告的魔法頁面。這解決了DbContext問題,因爲數據庫訪問發生在正常的Controller操作中,並與所有其他Controller訪問數據庫進行序列化。但是我仍然遇到可能運行多個計時器的問題,所以我需要在Controller動作中使用一些智能來忽略多餘的報告請求。
有什麼建議嗎?這種事情通常如何完成?
快速的答案是,你不應該從網站做到這一點。最簡單的解決方案是創建一個可執行文件來爲您完成工作並使用任務計劃程序進行安排。這取決於您的複雜程度和需求水平,有很多變化,但是從最簡單的時間表開始。不要通過網站做到這一點。工作錯誤的工具。 – Khepri 2013-04-07 06:23:52