.NET?Core使用Worker?Service創(chuàng)建服務(wù)
需求來源
在幾年前, 做的項(xiàng)目是依賴Windows服務(wù)來支撐一些業(yè)務(wù), 目前已經(jīng)把技術(shù)棧全部由.NET Framework 升級至 .NET Core x。
舊得需求大部分是,接入一些第三方得硬件設(shè)備, 例如PLC、串口讀卡器、TCP閱讀器、各種硬件模塊。
為了能夠讓任何開發(fā)語言接入無需重新實(shí)現(xiàn), 所以使用Windows服務(wù)添加支持各類硬件API、對外使用MQTT.NET來進(jìn)行協(xié)議開發(fā)。
版本更新
考慮到目前軟件的更新,其中包括安裝文件、SDK都是基于.NET Core, 所以使用Worker Service來創(chuàng)建服務(wù), 該服務(wù)支持在Windows與Linux運(yùn)行。
創(chuàng)建WorkerService
創(chuàng)建完成后, 整個默認(rèn)項(xiàng)目包含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>(); }); }
可以看到在配置服務(wù)中,AddHostedService添加了一個Worker, 類型約束IHostedService
關(guān)于Worker類的實(shí)現(xiàn)
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
在服務(wù)啟動時,會執(zhí)行該方法,每秒鐘輸入當(dāng)前時間
查看父類BackgroundService的實(shí)現(xiàn),可以看到有支持重寫的方法。
public virtual void Dispose(); public virtual Task StartAsync(CancellationToken cancellationToken); public virtual Task StopAsync(CancellationToken cancellationToken);
意思就是,我們可以在啟動服務(wù)時候觸發(fā)的邏輯以及暫停服務(wù)觸發(fā)的邏輯都可以自行編寫。
安裝服務(wù)
發(fā)布之后,即可使用sc.exe 來安裝/啟動/暫停/卸載服務(wù)等。
- 安裝服務(wù)
sc.exe create MyService binPath=C:\User\WorkerService.exe - 查詢服務(wù)狀態(tài)
sc.exe query MyService - 啟動服務(wù)
sc.exe start MyService - 暫停服務(wù)
sc.exe stop MyService - 卸載服務(wù)
sc.exe delete MyService
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ASP.NET性能優(yōu)化之讓瀏覽器緩存動態(tài)網(wǎng)頁的方法
上一篇《ASP.NET性能優(yōu)化之構(gòu)建自定義文件緩存》我們通過OutputCache,讓請求去訪問服務(wù)器asp.net的輸出緩存,我們擴(kuò)展了OutputCacheProvider,這相當(dāng)于是訪問服務(wù)器上的靜態(tài)資源。2011-09-09asp.net中ADO SQL數(shù)據(jù)庫 筆記匯總 持續(xù)更新中
asp.net中ADO SQL數(shù)據(jù)庫 筆記匯總 持續(xù)更新中,需要的朋友可以參考下2012-07-07Entity Framework使用Code First模式管理存儲過程
本文詳細(xì)講解了Entity Framework使用Code First模式管理存儲過程的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03使用.NET Core實(shí)現(xiàn)餓了嗎拆紅包功能
這篇文章主要介紹了使用.NET Core實(shí)現(xiàn)餓了嗎拆紅包功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07