.NET Core使用Worker Service創建服務
需求來源
在幾年前, 做的項目是依賴Windows服務來支撐一些業務, 目前已經把技術棧全部由.NET Framework 升級至 .NET Core x。
舊得需求大部分是,接入一些第三方得硬件設備, 例如PLC、串口讀卡器、TCP閱讀器、各種硬件模塊。
為瞭能夠讓任何開發語言接入無需重新實現, 所以使用Windows服務添加支持各類硬件API、對外使用MQTT.NET來進行協議開發。
版本更新
考慮到目前軟件的更新,其中包括安裝文件、SDK都是基於.NET Core, 所以使用Worker Service來創建服務, 該服務支持在Windows與Linux運行。
創建WorkerService
創建完成後, 整個默認項目包含Program以及一個Worker示例, 配置的模式與ASP.NET Core相同。
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); }); }
可以看到在配置服務中,AddHostedService添加瞭一個Worker, 類型約束IHostedService
關於Worker類的實現
public class Worker : BackgroundService { private readonly ILogger<Worker> _logger; public Worker(ILogger<Worker> logger) { _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); await Task.Delay(1000, stoppingToken); } } }
- ExecuteAsync
在服務啟動時,會執行該方法,每秒鐘輸入當前時間
查看父類BackgroundService的實現,可以看到有支持重寫的方法。
public virtual void Dispose(); public virtual Task StartAsync(CancellationToken cancellationToken); public virtual Task StopAsync(CancellationToken cancellationToken);
意思就是,我們可以在啟動服務時候觸發的邏輯以及暫停服務觸發的邏輯都可以自行編寫。
安裝服務
發佈之後,即可使用sc.exe 來安裝/啟動/暫停/卸載服務等。
- 安裝服務
sc.exe create MyService binPath=C:\User\WorkerService.exe - 查詢服務狀態
sc.exe query MyService - 啟動服務
sc.exe start MyService - 暫停服務
sc.exe stop MyService - 卸載服務
sc.exe delete MyService
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- .NET 中Worker Service的使用入門
- 詳解.NET Core中的Worker Service
- ASP.NET Core通用主機實現托管服務
- Net5 WorkService 繼承 Quarzt 及 Net5處理文件上傳功能
- 在ASP.Net Core中使用Lamar的全過程