1. 程式人生 > 程式設計 >詳解.NET Core中的Worker Service

詳解.NET Core中的Worker Service

當你想到ASP.NET Core時,可能會想到Web應用程式後端程式碼,包括MVC和WebAPI。MVC檢視和Razor頁面還允許使用後端程式碼生成帶有HTML元素的前端UI。全新的Blazor更進一步,允許使用WebAssembly在Web瀏覽器中執行客戶端.NET程式碼。最後,我們現在有了一個Worker Service應用程式的模板。

這是在ASP.NET Core早期預覽中引入的。雖然專案模板最初列在Web模板下,但此後在嚮導中重新定位了一個級別。這是在.NET Core中建立長時間執行的跨平臺服務的好方法。本文介紹Windows作業系統

詳解.NET Core中的Worker Service

Worker Service專案

在VisualStudio 2019中建立新的Worker Service專案的最快方法是使用最新模板。還可以使用適當的DotNetCLI命令。

啟動VisualStudio並選擇Worker Service模板,如下所示:

詳解.NET Core中的Worker Service

要使用命令列,使用以下命令,-o是一個可選標誌,用於為專案提供輸出資料夾名:

dotnet new worker -o myproject

程式和後臺服務

Program.cs類包含Main()方法和CreateHostBuilder()方法。這可以在下面的片段中看到:

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>();
  });
 }

要注意的事情:

1.Main方法呼叫CreateHostBuilder()方法,並執行它。

2.在ASP.NET Core中,WebHostBuilder將被GenericHostBuilder替代。

3.CreateHostBuilder()建立主機並通過呼叫AddHostService<T>

Worker.cs,定義如下:

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

要注意的事情:

www.cppcns.com

1.Worker類實現BackgroundService&nbhttp://www.cppcns.comsp;類,它來自名稱空間Microsoft.Extensions.Hoting

2.然後,Worker類可以重寫ExecuteAsync()方法來執行任何長期執行的任務。

Worker Service 中使用Logging

若要在Worker Service專案中使用日誌記錄,可以在Program.cs:

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

1.在使用擴充套件方法之前,將其NuGet包新增到專案中:

Microsoft.Extensions.Logging.EventLog

2.將適當的名稱空間新增到程式碼中:

using Microsoft.Extensions.Logging;

3.呼叫方法ConfigreLogging()並呼叫適當的日誌記錄方法,例如:AddEventLog()。

  • AddConsole()
  • AddDebug()
  • AddEventLog()
  • AddEventSourceLogger()

這個Worker類通過注入ILogger<Work>物件到建構函式中:

private readonly ILogger<Worker> _logger;

public Worker(ILogger<Worker> logger)
{ 
  _logger = logger;程式設計客棧
}

執行Worker Service

在繼續之前,請將呼叫新增把UseWindowsService()新增到Program類或者確認它已經在那裡了。官方文件中UseServiceBaseLifetime()在預覽版中。在新的版本此方法已重新命名為UseWindowsService()中。

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

根據程式碼文件,UseWindowsService()進行下列工作:

1.將主機生存期設定為WindowsServiceLifetime

2.設定ContentRoot

3.啟用以應用程式名稱作為程式設計客棧預設名稱的事件日誌記錄。

你可以以各種方式執行Worker Service:

1.在VisualStudio中生成和除錯/執行。

2.釋出到exe檔案並執行它

3.執行sc(從Windows\System 32)建立新服務

若要將Worker Service釋出為具有依賴關係的exe檔案,請執行以下命令:

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

-o引數可用於指定要生成已釋出檔案的資料夾的路徑。它可以是指向專案資料夾的路徑,然後是一個新的子資料夾名,以儲存已釋出的檔案。

若要建立新服務,請執行sc.exe從System 32資料夾中傳入從釋出命令生成的exe檔案的名稱。

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

當手動執行服務時,你將看到以下的日誌輸出:

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

服務安裝完成後,會出現在Windows的服務列表中:

詳解.NET Core中的Worker Service

以上就是詳解.NET Core中的Worker Service的詳細內容,更多關於.NET Core中的Worker Service的資料請關注我們其它相關文章!