.NET Core 部署IIS沒法啓動Hangfire方案

【導讀】不知道是否有童鞋遇到過將.NET Core部署到IIS上時,但Hangfire沒法啓動,天然而然也就致使做業沒法良好運行的問題,本文給出兩個方案,不知是否有完美解決方案,如有,請於留言中給出,謝謝。


Hangfire部署IISweb


相信有一部分童鞋在.NET Core上利用Hangfire來進行做業計劃,不管是一觸即發,仍是延遲,抑或是週期Hangfire都能很好的支持,可是若將Hangfire應用於實際生產環境時,咱們會發現存在不少問題,這些問題只有實踐事後才能體會到各類坑,但更深刻的資料網上並無,只能靠經驗或依託源碼摸索。微信


配置什麼的就不過多廢話,咱們實現一個很簡單的Hangfire週期做業,而後將一段字符串輸入到文本上,以下週期做業:app

RecurringJob.AddOrUpdate(
      () => File.WriteAllLines(Path.Combine(AppContext.BaseDirectory, "hangfire-demo.txt"), new[] { "Recurring" }),
      Cron.Minutely());


要將.NET Core寄宿在IIS運行除了安裝必須的runtime外,還需安裝對應版本的host-bundle模塊,這裏以.NET Core 3.1爲例,因此安裝名爲【dotnet-hosting-3.1.0-win】的host-bundle,至於緣由請自行察看官方文檔
編輯器


緊接着咱們打開IIS,建立.NET Core的無託管應用程序池,繼而建立網站,以下圖所示網站


而後咱們就等啊等,等到花兒都快謝了,最終咱們會發現過了幾分鐘後然鵝並無在以下圖文本中輸出字符串,你說氣人不ui




IIS啓動Hangfire方案spa


首先咱們在web.config裏打開.NET Core默認日誌輸出,將該屬性設置爲ture便可,以下圖所示
.net


而後手動訪問下網站,接下來咱們就能夠看到日誌文件3d

請客官稍等片刻,緊接着就啓動了Hangfire後臺服務並輸出了字符串到文件中
日誌

就是這樣,必須手動訪問下網站才能在IIS上啓動Hangfire,Hangfire本就做爲後臺做業服務去啓動業務做業,如今反過來還得手動鞭策一下才能啓動,有意思。


那麼到底是什麼緣由致使必須手動訪問網站才能啓動Hangfire呢?


那咱們是否能夠理解爲網站的啓動並不會使.NET Core程序啓動,換言之也就是不會執行startup,只有第一次訪問時纔會執行呢?


那麼咱們是否經過什麼方式使得網站啓動時,程序也進行了執行(即執行startup呢)


惟一能想到的則是.NET Core應用程序池,因此接下來咱們嘗試,當咱們發佈程序到IIS時首先將.NET Core應用程序池中止,建立完網站後再將該程序池啓動,以下:


此時咱們將發如今啓用了.NET Core默認文件日誌輸出後,將會自動如上生成日誌文件,從而很好的啓用了Hangire後臺做業服務。


綜上所述在IIS上想要啓動Hangfire做業服務,要麼手動訪問下網站,要麼在網站啓動後再啓動.NET Core無託管應用程序池。


以上純屬我我的的猜想和分析,如有錯誤之處,還請批評指正,謝謝。

本文分享自微信公衆號 - JeffckyShare(JeffckyShare)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索