簡體   English   中英

如何在asp.net MVC中創建定時調度程序?

[英]How do I create a timed scheduler in asp.net MVC?

我想在MVC網站中為應用程序功能創建一個相對簡單的定時事件調度功能,當前不一定是用戶,但將來可能會。 我當前的願望是使用時間表根據定時事件對網站進行特定更改。 總體思路如下所示。

我首先對asp.net的Quartz進行了調查,因為在其他帖子中也推薦使用它,但是該開源軟件包中的建議特別建議不要在嵌入式模式下使用它。 我認為我不能將其作為服務添加到托管MVC站點的服務器中。

盡管我熟悉多線程的概念,但是我對它沒有經驗。 在后台線程上運行下面的Timer Process是一個好的解決方案,還是我應該看看別的東西? 我假設計時器進程將永遠執行,將時間表與系統時鍾進行比較,並在發生時間觸發時使所需的事件代碼運行。

如果穿線不是一個好主意,請告知我應該看的地方。 如果穿線是正確的想法,任何建議或警告將不勝感激。 我目前正在閱讀線程。

我有幾個具體問題:

1) Should the individual event code run on the same thread, or does it matter? 
2) How do I handle the problem others have suggested occurs if 'IIS kills the thread' or the 'app pool is recycled'.
3) Is it a wrong idea that I send some message to the MVC site that triggers the Timer Process to overcome the issues in #2 above?
4) Is there a way to force a page to automatically refresh with a new display when the timer event occurs?  That doesn't seem to be the way asp.net MVC normally works.

最后,這聽起來像是其他人可能已經解決並將其簡化為asp.net MVC的開源解決方案的問題。 當我瀏覽Nu-Get時,似乎有一些描述了此問題,但下載量很少。 這條路線上有什么建議嗎?

在此處輸入圖片說明

我認為以您的情況使用Hangfire會很好。 您可以像並行服務器一樣配置,並以不同的時間表創建不同的作業。

對於NetCore應用程序:

app.UseHangfireServer();
app.UseHangfireDashboard("/hangfire", options);

// Process notifications every 6 hours
RecurringJob.AddOrUpdate<B2CEngineNotifications>(jobEngine =>  jobEngine.SendBillingNotifications(), "0 */6 * * *");

在這種情況下,每個作業都在自己的線程中工作。

1)單個事件代碼應該在同一線程上運行還是有關系? 這取決於您期望的事件類型。 如果不依賴它們,則可以在單獨的線程中進行操作。

如果“ IIS殺死線程”或“應用程序池被回收”,我該如何處理別人建議的問題。 Hangfire將在您的數據庫中創建一些表。 如果要終止進程,則在下次啟動時,它將從db獲取所有數據,並在scedule上開始執行事件。

我向MVC站點發送一些消息以觸發計時器進程以克服上面#2中的問題是一個錯誤的主意嗎? Hangfire有自己的界面來管理工作。 或者您需要選擇從MVC應用啟動事件? 您可以從MVC做到這一點,只需更改db值即可。 hangfire將開始工作。

有沒有一種方法可以在發生計時器事件時強制頁面自動刷新為新的顯示? 這似乎不是asp.net MVC正常工作的方式。 在這種情況下,您需要使用AJAX與服務器建立“實時”連接,而“詢問”是否已更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM