.NET?Core使用Worker?Service創(chuàng)建服務(wù)
需求來源
在幾年前, 做的項(xiàng)目是依賴Windows服務(wù)來支撐一些業(yè)務(wù), 目前已經(jīng)把技術(shù)棧全部由.NET Framework 升級(jí)至 .NET Core x。
舊得需求大部分是,接入一些第三方得硬件設(shè)備, 例如PLC、串口讀卡器、TCP閱讀器、各種硬件模塊。
為了能夠讓任何開發(fā)語言接入無需重新實(shí)現(xiàn), 所以使用Windows服務(wù)添加支持各類硬件API、對(duì)外使用MQTT.NET來進(jìn)行協(xié)議開發(fā)。
版本更新
考慮到目前軟件的更新,其中包括安裝文件、SDK都是基于.NET Core, 所以使用Worker Service來創(chuàng)建服務(wù), 該服務(wù)支持在Windows與Linux運(yùn)行。
創(chuàng)建WorkerService
創(chuàng)建完成后, 整個(gè)默認(rèn)項(xiàng)目包含Program以及一個(gè)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添加了一個(gè)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ù)啟動(dòng)時(shí),會(huì)執(zhí)行該方法,每秒鐘輸入當(dāng)前時(shí)間
查看父類BackgroundService的實(shí)現(xiàn),可以看到有支持重寫的方法。
public virtual void Dispose();
public virtual Task StartAsync(CancellationToken cancellationToken);
public virtual Task StopAsync(CancellationToken cancellationToken);意思就是,我們可以在啟動(dòng)服務(wù)時(shí)候觸發(fā)的邏輯以及暫停服務(wù)觸發(fā)的邏輯都可以自行編寫。
安裝服務(wù)
發(fā)布之后,即可使用sc.exe 來安裝/啟動(dòng)/暫停/卸載服務(wù)等。
- 安裝服務(wù)
sc.exe create MyService binPath=C:\User\WorkerService.exe - 查詢服務(wù)狀態(tài)
sc.exe query MyService - 啟動(dòng)服務(wù)
sc.exe start MyService - 暫停服務(wù)
sc.exe stop MyService - 卸載服務(wù)
sc.exe delete MyService
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ASP.NET數(shù)組刪除重復(fù)值實(shí)現(xiàn)代碼
在ASP.NET編程中,要想刪除數(shù)組的重復(fù)值可以使用多種方法代碼實(shí)現(xiàn)相同的效果。今天,在某個(gè)博客中看到某功能代碼中的一小段代碼很不錯(cuò),它就是用來移動(dòng)數(shù)組中相同值的方法,分享給大家2015-10-10
ASP.NET MVC從控制器傳遞數(shù)據(jù)到視圖的四種方式詳解
本篇文章主要介紹了ASP.NET MVC從控制器傳遞數(shù)據(jù)到視圖的四種方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01
ajaxToolkit:AccordionPane演示與應(yīng)用實(shí)例
ajaxToolkit:AccordionPane演示與應(yīng)用實(shí)例,需要的朋友可以參考一下2013-04-04
詳解.NET中string與StringBuilder在字符串拼接功能上的比較
string與StringBuilder的在字符串拼接時(shí)執(zhí)行效率上有差異,這篇文章主要介紹了詳解.NET中string與StringBuilder在字符串拼接功能上的比較,感興趣的小伙伴們可以參考一下2018-11-11
ADO.NET獲取數(shù)據(jù)(DataSet)同時(shí)獲取表的架構(gòu)實(shí)例
下面小編就為大家分享一篇ADO.NET獲取數(shù)據(jù)(DataSet)同時(shí)獲取表的架構(gòu)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12
ASP.NET實(shí)現(xiàn)上傳圖片并生成縮略圖的方法
這篇文章主要介紹了ASP.NET實(shí)現(xiàn)上傳圖片并生成縮略圖的方法,提供了一個(gè)asp.net上傳圖片與生成縮略圖的方法,并給出了改進(jìn)程序供大家對(duì)比分析,需要的朋友可以參考下2015-12-12

