欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.NET?Core使用Worker?Service創(chuàng)建服務(wù)

 更新時(shí)間:2022年02月15日 08:39:23   作者:痕跡g  
這篇文章介紹了.NET?Core使用Worker?Service創(chuàng)建服務(wù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

需求來(lái)源

在幾年前, 做的項(xiàng)目是依賴Windows服務(wù)來(lái)支撐一些業(yè)務(wù), 目前已經(jīng)把技術(shù)棧全部由.NET Framework 升級(jí)至 .NET Core x。

舊得需求大部分是,接入一些第三方得硬件設(shè)備, 例如PLC、串口讀卡器、TCP閱讀器、各種硬件模塊。
為了能夠讓任何開(kāi)發(fā)語(yǔ)言接入無(wú)需重新實(shí)現(xiàn), 所以使用Windows服務(wù)添加支持各類硬件API、對(duì)外使用MQTT.NET來(lái)進(jìn)行協(xié)議開(kāi)發(fā)。

版本更新

考慮到目前軟件的更新,其中包括安裝文件、SDK都是基于.NET Core, 所以使用Worker Service來(lái)創(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 來(lái)安裝/啟動(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)文章

最新評(píng)論