zoukankan      html  css  js  c++  java
  • .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:UserWorkerService.exe
    • 查询服务状态
      sc.exe query MyService
    • 启动服务
      sc.exe start MyService
    • 暂停服务
      sc.exe stop MyService
    • 卸载服务
      sc.exe delete MyService
  • 相关阅读:
    idea 快捷键
    vue.js
    破解idea
    如何进行反向迭代以及如何实现反向迭代?
    如何使用生成器函数实现可迭代对象?
    从一个实际小例子来看python中迭代器的应用
    MySql中常用的内置函数
    linux服务器重启oracle服务。
    oracle里面清除服务器上所有的oracle服务。
    刷机后的环境变量
  • 原文地址:https://www.cnblogs.com/zh7791/p/15078534.html
Copyright © 2011-2022 走看看