.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操作系统。
Worker Service项目
在VisualStudio 2019中创建新的Worker Service项目的最快方法是使用最新模板。还可以使用适当的DotNetCLI命令。
启动VisualStudio并选择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
当手动运行服务时,你将看到以下的日志输出:
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的服务列表中:
本文分享自微信公众号 - 码农译站(gh_c0d62fbb4bda)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
鸿蒙内核源码分析(系统调用篇) | 一撸到底,全面解剖系统调用实现过程 | 中文注解HarmonyOS源码 | v37.02
百万汉字注解 >> 精读内核源码,中文注解分析, 深挖地基工程,大脑永久记忆,四大码仓每日同步更新< gitee | github | csdn | coding > 百篇博客分析 >> 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,多站点每日同步更新< oschina | csdn | weharmony > 本篇说清楚系统调用 读本篇之前建议先读鸿蒙内核源码分析(总目录)工作模式篇. 本篇通过一张图和七段代码详细说明系统调用的整个过程,代码一捅到底,直到汇编层再也捅不下去. 先看图,这里的模式可以理解为空间,因为模式不同运行的栈空间就不一样. 过程解读 在应用层main中使用系统调用mq_open(posix标准接口) mq_open被封装在库中,这里直接看库里的代码. mq_open中调用syscall,将参数传给寄出器 R7,R0~R6 SVC 0 完成用户模式到内核模式(SVC)的切换 _osExceptSwiHdl运行在svc模式下. PC寄存器直接指向_osExceptSwiHdl处取指令. _osExcept...
- 下一篇
Kubernetes 稳定性保障手册 -- 日志专题
作者 | 悟鹏、沉醉 来源 | 阿里巴巴云原生公众号 《Kubernetes 稳定性保障手册》系列文章: Kubernetes 稳定性保障手册 -- 极简版 Kubernetes 稳定性保障手册 -- 日志专题(本文) 不论对于软件的用户还是开发者,日志都是很重要的信息源。日志可以用来表征软件的运行状态,在软件运行不符合预期时提供丰富的信息,也可以用在开发阶段调试软件,方便定位问题。 软件的生命周期涉及到 开发 和 运行 两个阶段,日志的生成是在软件的开发阶段,日志的使用集中在软件的运行阶段。 在开发阶段规范化日志,有助于运行阶段通过标准化方法分析日志、配置日志监控和告警。 在运行阶段通过标准化方法使用日志,有助于低成本把握程序的运行态行为,及时感知异常,促进开发阶段的迭代效率。 在软件的生命周期中,运行阶段时长占比会远大于开发阶段,即对日志的使用时长会远大于开发阶段写日志逻辑的时长。在开发阶段应用良好的日志规范,会对软件生命周期的正常运行和快速迭代带来很大帮助: 复杂度分析 程序中的元素可以抽象为两部分:自身逻辑,依赖。两类元素之间的交互为:自身逻辑闭环,自身逻辑与依赖交互。 从长期...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8编译安装MySQL8.0.19
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker使用Oracle官方镜像安装(12C,18C,19C)