使用.net 6.0创建Worker Service服务程序,并安装成Windows服务程序

本文介绍了如何使用.NET 6.0创建Worker Service项目,详细步骤包括创建项目、理解项目结构、添加NuGet包、创建自定义业务服务、重写BackgroundService类以实现Windows服务功能,最后演示了如何发布、安装、启动、停止和删除Windows服务。

1、创建Worker Service项目

选择“创建新项目”,选择创建模板“Worker Service”,点击“下一步”,填写项目名称和选择项目存储位置,名称我命名“MyTestWokerService”,存储位置为“D:\4、WorkSpace\1==VisualStudio==”,

 框架选择“.NET 6.0”,由于创建的本级Windows服务,所以不用启动Docker。直接点击“创建”。创建完成后的目录结构如图。

 

 

 

2、项目目录介绍

Program.cs是一个项目的总入口,该类的左右包括:

  • 创建默认 IHostBuilder。
  • 调用 ConfigureServices 以使用 AddHostedService 将 Worker 类添加为托管服务。
  • 从生成器生成 IHost。
  • 在运行应用的 host 实例上调用 Run。

Worker.cs是 BackgroundService 的子类,用于实现 IHostedService。 BackgroundService 是一个 abstract class,需要子类来实现 BackgroundService.ExecuteAsync(CancellationToken)。 在模板实现中,ExecuteAsync 每秒循环一次,记录当前日期和时间,直到进程收到取消信号。ILogger是默认加入的一个日志应用。

appsettings.json:项目运行时的公共配置。

appsettings.Development.json:开发环境的配置。

3、添加NuGet 包

为了与 .NET IHostedService 实现中的本机 Windows 服务互操作,需要安装 “Microsoft.Extensions.Hosting.WindowsServices NuGet” 包。安装方法为:右键点击项目,选择“管理 NuGet 程序包(N)...”,打开NuGet包管理器,在浏览中搜索“Microsoft.Extensions.Hosting.WindowsServices”,然后安装它。

 

4、创建自定义的业务服务程序

 在项目下创建一个新的业务类文件,此处创建为“WriteLogFile.cs”,这个类用来写日志文件。该类的内容为:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyTestWokerService
{
    public class WriteLogFile
    {

        public  void WriteLog(string str)
        {

            using System.IO.StreamWriter streamWriter = new("C:\\log.txt", true);

            streamWriter.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss  ffff") + "   ====   " + str);
        }


    }


}

5、重写 Worker 类 

将 WriteLogFile与 ILogger 一起注入。 这两者都作为 private readonly 字段提供给类。 在 ExecuteAsync 方法中,WriteLogFile服务请求写一个执行时间为,并将其写入日志文件中。

并重写StartAsync和StopAsync方法。具体代码实现如下:

namespace MyTestWokerService
{
    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;
        private readonly WriteLogFile _writeLogFile;

        public Worker(ILogger<Worker> logger, WriteLogFile writeLogFile)
        {
            _logger = logger;
            _writeLogFile = writeLogFile;
        }

        //启动是执行
        public override async Task StartAsync(CancellationToken cancellationToken)
        {
            _writeLogFile.WriteLog("启动时间为: " + DateTimeOffset.Now);
            await base.StartAsync(cancellationToken);
        }
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                _writeLogFile.WriteLog("执行时间为: "+ DateTimeOffset.Now);
                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                await Task.Delay(1000, stoppingToken);
            }
        }

        //停止时执行
        public override async Task StopAsync(CancellationToken cancellationToken)
        {
            _writeLogFile.WriteLog("停止时间为: " + DateTimeOffset.Now);
            await base.StopAsync(cancellationToken);
        }

    }
}

 6、重写 Program 类

 要将该项目应用配置为Windows服务工作,需要重写Program 类,使用UseWindowsService方法来配置,服务名称设置为“My Test Service”,托管服务已针对依赖项注入注册。代码如下:

using MyTestWokerService;

IHost host = Host.CreateDefaultBuilder(args)
    .UseWindowsService(options =>
    {
        //服务进行命名,会显示在Windows服务中的服务名称上
        options.ServiceName = "My Test Service";
    })
    .ConfigureServices(services =>
    {
        //注入服务类
        services.AddSingleton<WriteLogFile>();
        services.AddHostedService<Worker>();
    })
    .Build();

await host.RunAsync();

7、启动调试服务

点击“调试”,启动服务,弹出任务启动框,可看出  _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);已执行打印,打开C盘中的log文件,看到也在打印我们写的内容。

8、 发布应用

 若要将 .NET 服务应用创建为 Windows 服务,建议将应用作为单个可执行文件发布。 拥有一个独立式可执行文件不太容易出错,因为文件系统周围没有任何依赖文件。 但是你也可以选择其他发布形式,只要创建的 *.exe 文件可以作为 Windows 服务控制管理器的目标。

发布方法:右键单击“解决方案资源管理器”中的项目,选择“发布...”。然后,选择“添加发布配置文件”创建配置文件。 从“发布”对话框中,选择“文件夹”作为“目标”。然后选择发布的文件夹位置,默认的项目的bin的位置,我们这发布到D:\publish中,完成之后,点击“发布”。将编译应用,并将生成的 .exe 文件发布到 D:\publish输出目录。

9、创建 Windows 服务

 若要创建 Windows 服务,请使用本机 Windows 服务控制管理器 (sc.exe) create 命令。 以管理员身份运行cmd。进入Windows服务中,可找到该服务。

sc.exe create "My Test Service" binpath="D:\publish\MyTestWokerService.exe"

 

10、启动服务

若要启动Windows服务,使用“sc.exe start”命令。
 

sc.exe start "My Test Service"

 ​​​​​​

 11、停止服务

若要停止Windows服务,使用“sc.exe stop”命令。

sc.exe stop "My Test Service"

 12、删除Windows服务

若要删除 Windows 服务,请使用本机 Windows 服务控制管理器 “sc.exe delete” 命令。

sc.exe delete "My Test Service"

 

 

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红尘逸事、浊酒一杯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值