Worker Service in ASP .NET Core
介紹
提到 ASP.NET Core,我們多半會(huì)想到 ASP.NET MVC、ASP.NET Web API、Razor page 及?Blazor。隨著 .NET Core 3.0 的推出,今天會(huì)介紹一個(gè)全新推出的功能:Work Service 。我們可以在 Visual Studio 2019 中通過(guò)預(yù)定的項(xiàng)目模版快速創(chuàng)建一個(gè) WorkService項(xiàng)目。
或者使用 .NET CLI:
> dotnet new worker -o myWorkServiceProject-o 是一個(gè)可選標(biāo)志,用于指定項(xiàng)目輸出文件夾名稱(chēng)。關(guān)于 Work Service 模版的更多信息可以參考:WorkService。
示例
首先我們創(chuàng)建一個(gè) .NET Core 控制臺(tái)程序。
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>();});}?
注意事項(xiàng):
- 從 ASP.NET Core 3.0 起 WebHost 將被更通用的 Host 取代。
- CreateHostBuilder 創(chuàng)建主機(jī)并在 ConfigureServices 中調(diào)用 AddHostedService<T> 來(lái)配置它。
Worker 類(lèi)繼承了 BackgroundService 下面貼出代碼:
public class Worker : BackgroundService {// ...protected override async Task ExecuteAsync(CancellationToken stoppingToken){// do stuff here } }?
我們可以通過(guò) override ExecuteAsync 來(lái)完成自己要做的事情。
接下來(lái)我們添加一個(gè)日志組件,用于記錄日志:
using Microsoft.Extensions.Logging;?
public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).UseWindowsService().ConfigureLogging(loggerFactory => loggerFactory.AddEventLog()).ConfigureServices(services =>{services.AddHostedService<Worker>();});?
添加完日志組件后,我們可以在 Worker 類(lèi)的構(gòu)造函數(shù)中注入日志記錄器:
private readonly ILogger<Worker> _logger;public Worker(ILogger<Worker> logger) {this._logger = logger; }?
運(yùn)行
注意:我們需要以管理員模式打開(kāi) Powershell 或 cmd 窗口。在運(yùn)行之前我們需要在入口添加或確認(rèn)有對(duì) UseWindowsService() [早期此方法的名稱(chēng)是:UseServiceBaseLifetime()]的調(diào)用:
public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).UseWindowsService().ConfigureServices(services =>{services.AddHostedService<Worker>();});可通過(guò)給 UseWindowsService 方法傳遞參數(shù)設(shè)置 Windows 服務(wù)。
?
發(fā)布
dotnet publish -o C:\path\to\project\pubfolder?
將程序發(fā)布到 pubfolder 文件夾中以后,我們開(kāi)始通過(guò) sc.exe 創(chuàng)建 Windows 服務(wù)。
> C:\Windows\System32\sc create MyServiceName binPath=C:\path\to\project\pubfolder\MyProjectName.exe?
服務(wù)創(chuàng)建完成后,它會(huì)出現(xiàn)在Windows 服務(wù)列表中,當(dāng)我們手動(dòng)啟動(dòng)服務(wù)時(shí),應(yīng)該會(huì)看到日志的輸出:
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 平臺(tái)上調(diào)用 UseWindowsService 方法也是不會(huì)報(bào)錯(cuò)的,非 Windows 平臺(tái)會(huì)忽略此調(diào)用。
?以上就是介紹的全部?jī)?nèi)容了。如果想用 .NET Core 開(kāi)發(fā) Windows 服務(wù)的,不防試試看。
轉(zhuǎn)載于:https://www.cnblogs.com/jRoger/p/11007826.html
總結(jié)
以上是生活随笔為你收集整理的Worker Service in ASP .NET Core的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【转】Linux Netfilter实现
- 下一篇: sshpass命令使用