详解.NET Core中的Worker Service
当你想到ASP.NETCore时,可能会想到Web应用程序后端代码,包括MVC和WebAPI。MVC视图和Razor页面还允许使用后端代码生成带有HTML元素的前端UI。全新的Blazor更进一步,允许使用WebAssembly在Web浏览器中运行客户端.NET代码。最后,我们现在有了一个WorkerService应用程序的模板。
这是在ASP.NETCore早期预览中引入的。虽然项目模板最初列在Web模板下,但此后在向导中重新定位了一个级别。这是在.NETCore中创建长时间运行的跨平台服务的好方法。本文介绍Windows操作系统。
WorkerService项目
在VisualStudio2019中创建新的WorkerService项目的最快方法是使用最新模板。还可以使用适当的DotNetCLI命令。
启动VisualStudio并选择WorkerService模板,如下所示:
要使用命令行,使用以下命令,-o是一个可选标志,用于为项目提供输出文件夹名:
dotnetnewworker-omyproject
程序和后台服务
Program.cs类包含Main()方法和CreateHostBuilder()方法。这可以在下面的片段中看到:
publicclassProgram { publicstaticvoidMain(string[]args) { CreateHostBuilder(args).Build().Run(); } publicstaticIHostBuilderCreateHostBuilder(string[]args)=> Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureServices(services=> { services.AddHostedService(); }); }
要注意的事情:
1. Main方法调用CreateHostBuilder()方法,并运行它。
2. 在ASP.NETCore中,WebHostBuilder将被Generic HostBuilder替代。
3. CreateHostBuilder()创建主机并通过调用AddHostService
Worker.cs,定义如下:
publicclassWorker:BackgroundService { //... protectedoverrideasyncTaskExecuteAsync(CancellationTokenstoppingToken) { //dostuffhere } }
要注意的事情:
1. Worker类实现BackgroundService 类,它来自命名空间Microsoft.Extensions.Hoting
2. 然后,Worker类可以重写ExecuteAsync()方法来执行任何长期运行的任务。
WorkerService中使用Logging
若要在WorkerService项目中使用日志记录,可以在Program.cs:
usingMicrosoft.Extensions.Logging; publicstaticIHostBuilderCreateHostBuilder(string[]args)=> Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureLogging(loggerFactory=>loggerFactory.AddEventLog()) .ConfigureServices(services=> { services.AddHostedService(); });
1.在使用扩展方法之前,将其NuGet包添加到项目中:
Microsoft.Extensions.Logging.EventLog
2.将适当的命名空间添加到代码中:
usingMicrosoft.Extensions.Logging;
3.调用方法ConfigreLogging()并调用适当的日志记录方法,例如:AddEventLog()。
- AddConsole()
- AddDebug()
- AddEventLog()
- AddEventSourceLogger()
这个Worker类通过注入ILogger
privatereadonlyILogger_logger; publicWorker(ILogger logger) { _logger=logger; }
运行WorkerService
在继续之前,请将调用添加把UseWindowsService()添加到Program类或者确认它已经在那里了。官方文档中UseServiceBaseLifetime()在预览版中。在新的版本此方法已重命名为UseWindowsService()中。
publicstaticIHostBuilderCreateHostBuilder(string[]args)=> Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureServices(services=> { services.AddHostedService(); });
根据代码文档,UseWindowsService()进行下列工作:
1. 将主机生存期设置为WindowsServiceLifetime
2. 设置 ContentRoot
3. 启用以应用程序名称作为默认名称的事件日志记录。
你可以以各种方式运行WorkerService:
1.在VisualStudio中生成和调试/运行。
2.发布到exe文件并运行它
3.运行sc(从Windows\System32)创建新服务
若要将WorkerService发布为具有依赖关系的exe文件,请运行以下命令:
dotnetpublish-oC:\path\to\project\pubfolder
-o参数可用于指定要生成已发布文件的文件夹的路径。它可以是指向项目文件夹的路径,然后是一个新的子文件夹名,以保存已发布的文件。
若要创建新服务,请运行sc.exe从System32文件夹中传入从发布命令生成的exe文件的名称。
>C:\Windows\System32\sccreateMyServiceNamebinPath=C:\path\to\project\pubfolder\MyProjectName.exe
当手动运行服务时,你将看到以下的日志输出:
info:WorkerServiceSample.Worker[0]Makingdoc1at:06/09/201900:09:52-04:00Makingyourdocument... info:WorkerServiceSample.Worker[0]Makingdoc2at:06/09/201900:10:05-04:00Makingyourdocument... info:Microsoft.Hosting.Lifetime[0] Applicationstarted.PressCtrl+Ctoshutdown. info:Microsoft.Hosting.Lifetime[0] Hostingenvironment:Development
服务安装完成后,会出现在Windows的服务列表中:
以上就是详解.NETCore中的WorkerService的详细内容,更多关于.NETCore中的WorkerService的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。