Worker Service in ASP .NET Core
介绍
提到 ASP.NET Core,我们多半会想到 ASP.NET MVC、ASP.NET Web API、Razor page 及 Blazor。随着 .NET Core 3.0 的推出,今天会介绍一个全新推出的功能:Work Service 。我们可以在 Visual Studio 2019 中通过预定的项目模版快速创建一个 WorkService项目。
或者使用 .NET CLI:
1 | > dotnet new worker -o myWorkServiceProject |
-o 是一个可选标志,用于指定项目输出文件夹名称。关于 Work Service 模版的更多信息可以参考:WorkService。
示例
首先我们创建一个 .NET Core 控制台程序。
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>(); }); }
注意事项:
- 从 ASP.NET Core 3.0 起 WebHost 将被更通用的 Host 取代。
- CreateHostBuilder 创建主机并在 ConfigureServices 中调用 AddHostedService<T> 来配置它。
Worker 类继承了 BackgroundService 下面贴出代码:
public class Worker : BackgroundService { // ... protected override async Task ExecuteAsync(CancellationToken stoppingToken) { // do stuff here } }
我们可以通过 override ExecuteAsync 来完成自己要做的事情。
接下来我们添加一个日志组件,用于记录日志:
using Microsoft.Extensions.Logging;
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureLogging(loggerFactory => loggerFactory.AddEventLog()) .ConfigureServices(services => { services.AddHostedService<Worker>(); });
添加完日志组件后,我们可以在 Worker 类的构造函数中注入日志记录器:
private readonly ILogger<Worker> _logger; public Worker(ILogger<Worker> logger) { this._logger = logger; }
运行
注意:我们需要以管理员模式打开 Powershell 或 cmd 窗口。在运行之前我们需要在入口添加或确认有对 UseWindowsService() [早期此方法的名称是:UseServiceBaseLifetime()]的调用:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureServices(services => { services.AddHostedService<Worker>(); });
可通过给 UseWindowsService 方法传递参数设置 Windows 服务。
发布
dotnet publish -o C:\path\to\project\pubfolder
将程序发布到 pubfolder 文件夹中以后,我们开始通过 sc.exe 创建 Windows 服务。
> C:\Windows\System32\sc create MyServiceName binPath=C:\path\to\project\pubfolder\MyProjectName.exe
服务创建完成后,它会出现在Windows 服务列表中,当我们手动启动服务时,应该会看到日志的输出:
info: WorkerServiceSample.Worker[0] Making doc 1 at: 06/09/2019 00:09:52 -04:00 Making your document... info: WorkerServiceSample.Worker[0] Making doc 2 at: 06/09/2019 00:10:05 -04:00 Making your document... info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development
注意:在非 Windows 平台上调用 UseWindowsService 方法也是不会报错的,非 Windows 平台会忽略此调用。
以上就是介绍的全部内容了。如果想用 .NET Core 开发 Windows 服务的,不防试试看。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架