Worker Service in ASP .NET Core

介绍

提到 ASP.NET Core,咱们多半会想到 ASP.NET MVC、ASP.NET Web API、Razor page 及 Blazor。随着 .NET Core 3.0 的推出,今天会介绍一个全新推出的功能:Work Service 。咱们能够在 Visual Studio 2019 中经过预约的项目模版快速建立一个 WorkService项目。web

或者使用 .NET CLI:shell

> dotnet new worker -o myWorkServiceProject

-o 是一个可选标志,用于指定项目输出文件夹名称。关于 Work Service 模版的更多信息能够参考:WorkService。  bash

示例

首先咱们建立一个 .NET Core 控制台程序。async

public class Program
{
   public static void Main(string[] args)
   {
      CreateHostBuilder(args).Build().Run();
   }

   public static IHostBuilder CreateHostBuilder(string[] args) =>
      Host.CreateDefaultBuilder(args)
      .UseWindowsService()
      .ConfigureServices(services =>
      {
         services.AddHostedService<Worker>();
      });
 }

 

注意事项:ide

  • 从 ASP.NET Core 3.0 起 WebHost 将被更通用的 Host 取代。
  • CreateHostBuilder 建立主机并在 ConfigureServices 中调用 AddHostedService<T> 来配置它。

Worker 类继承了 BackgroundService 下面贴出代码:函数

public class Worker : BackgroundService
{
   // ...
 
   protected override async Task ExecuteAsync(CancellationToken stoppingToken)
   {
      // do stuff here
   }
}

 

咱们能够经过 override ExecuteAsync 来完成本身要作的事情。ui

接下来咱们添加一个日志组件,用于记录日志:this

using Microsoft.Extensions.Logging;

 

public static IHostBuilder CreateHostBuilder(string[] args) =>
 Host.CreateDefaultBuilder(args)
 .UseWindowsService()
 .ConfigureLogging(loggerFactory => loggerFactory.AddEventLog())
 .ConfigureServices(services =>
 {
    services.AddHostedService<Worker>();
 });

 

添加完日志组件后,咱们能够在 Worker 类的构造函数中注入日志记录器:spa

private readonly ILogger<Worker> _logger;

public Worker(ILogger<Worker> logger)
{
   this._logger = logger;
}

 

运行

注意:咱们须要以管理员模式打开 Powershell 或 cmd 窗口。在运行以前咱们须要在入口添加或确认有对 UseWindowsService() [早期此方法的名称是:UseServiceBaseLifetime()]的调用:.net

   public static IHostBuilder CreateHostBuilder(string[] args) =>
      Host.CreateDefaultBuilder(args)
      .UseWindowsService()
      .ConfigureServices(services =>
      {
         services.AddHostedService<Worker>();
      });

可经过给 UseWindowsService 方法传递参数设置 Windows 服务。

 

发布

dotnet publish -o C:\path\to\project\pubfolder

 

将程序发布到 pubfolder 文件夹中之后,咱们开始经过 sc.exe 建立 Windows 服务。

> C:\Windows\System32\sc create MyServiceName binPath=C:\path\to\project\pubfolder\MyProjectName.exe

 

服务建立完成后,它会出如今Windows 服务列表中,当咱们手动启动服务时,应该会看到日志的输出:

info: WorkerServiceSample.Worker[0]
 Making doc 1 at: 06/09/2019 00:09:52 -04:00
Making your document...
info: WorkerServiceSample.Worker[0]
 Making doc 2 at: 06/09/2019 00:10:05 -04:00
Making your document...
info: Microsoft.Hosting.Lifetime[0]
 Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
 Hosting environment: Development

 注意:在非 Windows 平台上调用 UseWindowsService 方法也是不会报错的,非 Windows 平台会忽略此调用。

 以上就是介绍的所有内容了。若是想用 .NET Core 开发 Windows 服务的,不防试试看。

相关文章
相关标签/搜索