• 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项目。

    或者使用 .NET CLI:

    > dotnet new worker -o myWorkServiceProject
    

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

    示例

    首先我们创建一个 .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(services =>
          {
             services.AddHostedService<Worker>();
          });
     }

    注意事项:

    • 从 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 来完成自己要做的事情。

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

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

    添加完日志组件后,我们可以在 Worker 类的构造函数中注入日志记录器:

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

    运行

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

       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 服务的,不防试试看。

    本博客内容,如需转载请务必保留超链接。

    Contact Me:Mail此处省略好几个字...
  • 相关阅读:
    c语言 循环、数组、指针、冒泡排序、最大最小(上课)
    路由器远程配置实验
    一个排序小程序(上课)
    shells/clickhouse.sh
    shells/insertToTable.sh
    shells/flink.sh
    shells/hadoop.sh
    shells/flume.sh
    shells/hadoop
    练习:Flink ProcessWindowFunction、AggregateFunction、KeyedProcessFunction
  • 原文地址:https://www.cnblogs.com/jroger/p/11007826.html
Copyright © 2020-2023  润新知