提到 ASP.NET Core,咱们多半会想到 ASP.NET MVC、ASP.NET Web API、Razor page 及 Blazor。随着 .NET Core 3.0 的推出,今天会介绍一个全新推出的功能:Work Service 。咱们能够在 Visual Studio 2019 中经过预约的项目模版快速建立一个 WorkService项目。web
或者使用 .NET CLI:shell
> dotnet new worker -o myWorkServiceProject
-o 是一个可选标志,用于指定项目输出文件夹名称。关于 Work Service 模版的更多信息能够参考:WorkService。 bash
首先咱们建立一个 .NET Core 控制台程序。async
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>(); }); }
注意事项:ide
Worker 类继承了 BackgroundService 下面贴出代码:函数
public class Worker : BackgroundService { // ... protected override async Task ExecuteAsync(CancellationToken stoppingToken) { // do stuff here } }
咱们能够经过 override ExecuteAsync 来完成本身要作的事情。ui
接下来咱们添加一个日志组件,用于记录日志:this
using Microsoft.Extensions.Logging;
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureLogging(loggerFactory => loggerFactory.AddEventLog()) .ConfigureServices(services => { services.AddHostedService<Worker>(); });
添加完日志组件后,咱们能够在 Worker 类的构造函数中注入日志记录器:spa
private readonly ILogger<Worker> _logger; public Worker(ILogger<Worker> logger) { this._logger = logger; }
注意:咱们须要以管理员模式打开 Powershell 或 cmd 窗口。在运行以前咱们须要在入口添加或确认有对 UseWindowsService() [早期此方法的名称是:UseServiceBaseLifetime()]的调用:.net
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 服务的,不防试试看。