溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

NET Core中的Worker Service是什么/怎么用

發(fā)布時(shí)間:2021-03-12 17:12:33 來源:億速云 閱讀:391 作者:TREX 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“NET Core中的Worker Service是什么/怎么用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“NET Core中的Worker Service是什么/怎么用”吧!

當(dāng)你想到ASP.NET Core時(shí),可能會(huì)想到Web應(yīng)用程序后端代碼,包括MVC和WebAPI。MVC視圖和Razor頁(yè)面還允許使用后端代碼生成帶有HTML元素的前端UI。全新的Blazor更進(jìn)一步,允許使用WebAssembly在Web瀏覽器中運(yùn)行客戶端.NET代碼。最后,我們現(xiàn)在有了一個(gè)Worker Service應(yīng)用程序的模板。

這是在ASP.NET Core早期預(yù)覽中引入的。雖然項(xiàng)目模板最初列在Web模板下,但此后在向?qū)е兄匦露ㄎ涣艘粋€(gè)級(jí)別。這是在.NET Core中創(chuàng)建長(zhǎng)時(shí)間運(yùn)行的跨平臺(tái)服務(wù)的好方法。本文介紹Windows操作系統(tǒng)。

NET Core中的Worker Service是什么/怎么用

Worker Service項(xiàng)目

在VisualStudio 2019中創(chuàng)建新的Worker Service項(xiàng)目的最快方法是使用最新模板。還可以使用適當(dāng)?shù)腄otNetCLI命令。

啟動(dòng)VisualStudio并選擇Worker Service模板,如下所示:

NET Core中的Worker Service是什么/怎么用

要使用命令行,使用以下命令,-o是一個(gè)可選標(biāo)志,用于為項(xiàng)目提供輸出文件夾名:

dotnet new worker -o myproject

程序和后臺(tái)服務(wù)

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方法調(diào)用CreateHostBuilder()方法,并運(yùn)行它。

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

3. CreateHostBuilder()創(chuàng)建主機(jī)并通過調(diào)用AddHostService<T>

Worker.cs,定義如下:

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

要注意的事情:

1. Worker類實(shí)現(xiàn)BackgroundService 類,它來自命名空間Microsoft.Extensions.Hoting

2. 然后,Worker類可以重寫ExecuteAsync()方法來執(zhí)行任何長(zhǎng)期運(yùn)行的任務(wù)。

Worker Service 中使用Logging

若要在Worker Service項(xiàng)目中使用日志記錄,可以在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>();
 });

1.在使用擴(kuò)展方法之前,將其NuGet包添加到項(xiàng)目中:

Microsoft.Extensions.Logging.EventLog

2.將適當(dāng)?shù)拿臻g添加到代碼中:

using Microsoft.Extensions.Logging;

3.調(diào)用方法ConfigreLogging()并調(diào)用適當(dāng)?shù)娜罩居涗浄椒?,例如:AddEventLog()。

  • AddConsole()

  • AddDebug()

  • AddEventLog()

  • AddEventSourceLogger()

這個(gè)Worker類通過注入ILogger<Work>對(duì)象到構(gòu)造函數(shù)中:

private readonly ILogger<Worker> _logger;

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

運(yùn)行Worker Service

在繼續(xù)之前,請(qǐng)將調(diào)用添加把UseWindowsService()添加到Program類或者確認(rèn)它已經(jīng)在那里了。官方文檔中UseServiceBaseLifetime()在預(yù)覽版中。在新的版本此方法已重命名為UseWindowsService()中。

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

根據(jù)代碼文檔,UseWindowsService()進(jìn)行下列工作:

1. 將主機(jī)生存期設(shè)置為WindowsServiceLifetime

2. 設(shè)置 ContentRoot

3. 啟用以應(yīng)用程序名稱作為默認(rèn)名稱的事件日志記錄。

你可以以各種方式運(yùn)行Worker Service:

1.在VisualStudio中生成和調(diào)試/運(yùn)行。

2.發(fā)布到exe文件并運(yùn)行它

3.運(yùn)行sc(從Windows\System 32)創(chuàng)建新服務(wù)

若要將Worker Service發(fā)布為具有依賴關(guān)系的exe文件,請(qǐng)運(yùn)行以下命令:

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

-o參數(shù)可用于指定要生成已發(fā)布文件的文件夾的路徑。它可以是指向項(xiàng)目文件夾的路徑,然后是一個(gè)新的子文件夾名,以保存已發(fā)布的文件。

若要?jiǎng)?chuàng)建新服務(wù),請(qǐng)運(yùn)行sc.exe從System 32文件夾中傳入從發(fā)布命令生成的exe文件的名稱。

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

當(dāng)手動(dòng)運(yùn)行服務(wù)時(shí),你將看到以下的日志輸出:

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

服務(wù)安裝完成后,會(huì)出現(xiàn)在Windows的服務(wù)列表中:

NET Core中的Worker Service是什么/怎么用

到此,相信大家對(duì)“NET Core中的Worker Service是什么/怎么用”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI