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 服務的,不防試試看。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM