您好,登錄后才能下訂單哦!
在.NET Core 3.0 中,我們引入了一種名為 Worker Service 的新型應用程序模板。此模板旨在為您在 .NET Core 中編寫長時間運行的服務的提供一個起點。在本演練中,我們將創建一個 worker 并將其作為 Windows 服務運行。
創建一個 Worker
注意:在我們的預覽版中,worker 模板與 Web 模板位于同一級菜單中。這將在未來的版本中發生變化。我們打算將 Worker Service 模板直接放在“創建新項目”菜單中。
在 Visual Studio 中創建 Worker
在命令行中創建 Worker
運行 dotnet new worker
作為 Windows 服務運行
為了作為 Windows 服務運行,我們需要我們的 worker 監聽來自 ServiceBase 的啟動停止信號,該類型將 Windows 服務系統暴露給 .NET 應用程序。要做到這一點,我們希望:
添加 Microsoft.Extensions.Hosting.WindowsServices
NuGet 包
在 Program.cs 的 HostBuilder 中添加對 UseServiceBaseLifetime 的調用
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseServiceBaseLifetime() .ConfigureServices(services => { services.AddHostedService<Worker>(); }); }
這個方法做了兩件事。首先,它檢查應用程序是否真正的作為 Windows 服務運行,如果不是,那么它什么都不做,這使得這個方法很安全,當本地運行或作為 Windows 服務運行時。您不需要向其添加保護語句,只需在未作為 Windows 服務安裝時正常運行應用程序即可。
其次,它將配置 host 使用 ServiceBaseLifetime。 ServiceBaseLifetime 與 ServiceBase 一起使用,以幫助控制作為 Windows 服務運行時應用程序的生命周期。這會覆蓋處理 CTRL + C 等信號的默認的 ConsoleLifetime 。
安裝 Worker
一旦我們的 worker 使用 ServiceBaseLifetime,我們就需要安裝它:
首先,讓我們發布應用程序。如果我們立刻安裝了 Windows 服務,這意味著只要服務運行,exe 就會被鎖定。發布這一步是個很好的方法, 以確保我需要運行服務的所有文件都在一個位置, 并準備好安裝。
dotnet publish -o c:\code\workerpub
然后我們就可以在命令行中使用 sc 命令來安裝
sc create workertest binPath=c:\code\workerpub\WorkerTest.exe
例如:
安全說明:此命令將服務使用 local system 運行,這通常不是您想要做的事情。相反,您應該創建一個服務帳戶并以該帳戶運行 Windows 服務。我們不會在這里討論這個問題,但是有一些文檔在這里討論它: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-2.2
日志
日志記錄系統有 Event Log 的提供程序,可以將日志消息直接發送到 Windows 事件日志。安裝 Microsoft.Extensions.Logging.EventLog
并修改 Program.cs :
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging(loggerFactory => loggerFactory.AddEventLog()) .ConfigureServices(services => { services.AddHostedService<Worker>(); });
未來工作
在即將到來的預覽版中,我們計劃通過以下方式改善使用 Worker 的體驗:
結論
我們希望您試用這個新模板,并希望您告訴我們它有什么問題,您可以在此處提出任何錯誤或建議:
https://github.com/aspnet/AspNetCore/issues/new/choose 譯者注
原文作者在評論中提到,下一篇文章將講解如何在 Linux/Unix 中創建服務
原文: .NET Core Workers as Windows Services
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。