您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何利用Topshelf把.NET Core Generic Host管理的應用程序部署為Windows服務,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
官方文檔只提供了一個《在 Windows 服務中托管 ASP.NET Core》的方案,可以使用Microsoft.AspNetCore.Hosting.WindowsServices
類庫來把Web應用部署為Windows服務。但是ASP.NET Core雖然是控制臺程序,但是它本身是使用了含有HTTP管道的Web Host來負責應用程序的生命周期管理,用它來作為定時任務的話,會有很多不必要的工作負載,例如占用端口、增加了很多依賴等等。
官方意識到這個問題之后,在.NET Core 2.1版本新增了Generic Host通用主機,剝離了原來WebHost的Http管道相關的API,源碼中可以發現Web Host已經基于Generic Host實現。它才是作為純粹定時任務程序的最佳拍檔。
但是由于Generic Host本身非常簡單,用它運行的程序設置在注冊為Windows服務啟動之后會自動停止。研究很久之后才知道,想在Windows上啟動服務,還是不能像Linux上那么簡單——
于是嘗試結合Topshelf來創建Windows服務,最終成功了。
先實現IHostLifetime
接口來接管應用程序的生命周期,其實就是用空的實現來替換掉默認的ConsoleLifetime,這樣就可以在之后由Topshelf框架內部去管理生命周期。
然后實現IHostedService
接口,把后臺任務邏輯寫到StartAsync
方法中,參見官方文檔《在 ASP.NET Core 中使用托管服務實現后臺任務》,本文示例使用定時寫入文本到一個文件來測試定時任務是否成功運行。
構建Generic Host,在ConfigureServices
方法中注冊TopshelfLifetime
,并且注冊一個托管服務FileWriterService
,就能完成Generic Host的簡單構建,當然完整的項目應該還包含配置、日志等等。最后,使用Topshelf來接管Generic Host,創建Windows服務。
最后發布應用程序,并安裝到Windows服務。
以管理員權限開啟終端,執行命令:
這樣這個Windows服務就啟動了!查看輸出文件,可以看到定時寫入成功,服務也一直沒關閉~
上述內容就是如何利用Topshelf把.NET Core Generic Host管理的應用程序部署為Windows服務,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。