详解.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将被Generic HostBuilder替代。

3. CreateHostBuilder()建设主机并通过挪用AddHostService<T>

Worker.cs,界说如下:

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

要留意的工作:

1. Worker类实现BackgroundService 类,它来自定名空间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>(); });

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

当手动运行处事时,你将看到以下的日志输出:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsjfyf.html