日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

使用.NET Core创建Windows服务 - 使用.NET Core工作器方式

發(fā)布時間:2023/12/4 windows 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用.NET Core创建Windows服务 - 使用.NET Core工作器方式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文:Creating Windows Services In .NET Core – Part 3 – The “.NET Core Worker” Way

作者:Dotnet Core Tutorials

譯者:Lamond Lu

譯文:使用.NET Core創(chuàng)建Windows服務(wù) - 使用.NET Core工作器方式

使用.NET Core創(chuàng)建Windows服務(wù)

  • 使用微軟推薦方式

  • 使用Topshelf方式


安裝步驟

這里首先你要確保你已經(jīng)安裝了.NET Core 3.0或以上版本。在我編寫這篇文章的時候, .NET Core 3.1剛剛發(fā)布,Visual Studio應(yīng)該會提示你升級到最新版本。但是如果你想要在.NET Core 2.x項目中使用這個方式,應(yīng)該是行不通的。

如果你喜歡使用命令行創(chuàng)建項目,你就需要使用工作器(worker)類型創(chuàng)建項目:

dotnet new worker

如果你是一個和我一樣喜歡使用Visual Studio的開發(fā)人員,那么你可以在Visual Studio中使用項目模板完成相同的功能。

這樣做將創(chuàng)建出一個包含兩個文件的項目。其中Program.cs文件是應(yīng)用的啟動“引導程序”。另外一個文件是worker.cs文件,在這個文件中,你可以編寫你的服務(wù)邏輯。

這看起來應(yīng)該是相當?shù)娜菀?#xff0c;但是為這個程序添加額外的并行后臺服務(wù),你還需要添加一個類,并讓它繼承BackgroundService類:

public class MyNewBackgroundWorker : BackgroundService {protected override Task ExecuteAsync(CancellationToken stoppingToken) {//Do something.}}

然后在Program.cs中,我們要做的只是把當前的Worker注冊到服務(wù)集合(Service Collection)中即可。

.ConfigureServices((hostContext, services) => {services.AddHostedService<Worker>();services.AddHostedService<MyNewBackgroundWorker>(); });

實際上作為“后臺服務(wù)”任務(wù)的運行程序,AddHostedService方法已經(jīng)在框架中存在了很長時間了。在之前我們已經(jīng)完成的一篇關(guān)于ASP.NET Core托管服務(wù)的文章, 但是在當時場景中,我們托管是是整個應(yīng)用,而非一個在你應(yīng)用程序幕后運行的東西。

運行/調(diào)試我們的應(yīng)用

在默認的工作器(worker)模板中,已經(jīng)包含了一個后臺服務(wù),這個服務(wù)可以將當前時間輸出到控制臺窗口。下面讓我們點擊F5來運行程序,看看我們能得到什么。

info: CoreWorkerService.Worker[0]Worker running at: 12/07/2019 08:20:30 +13:00 info: Microsoft.Hosting.Lifetime[0]Application started. Press Ctrl+C to shut down.

在我們啟動程序之后,程序立刻就運行了!我們可以保持控制臺的打開狀態(tài)來調(diào)試應(yīng)用,或者直接關(guān)閉窗口退出。相較于使用"Microsoft"方式來調(diào)試一個Windows服務(wù),這簡直就是天堂。

這里我們需要注意的另外一件事情是編寫控制臺程序的平臺。在最后,我們不僅在控制臺窗口輸出了時間,還通過依賴注入創(chuàng)建了一個托管worker. 我們也可以使用依賴注入容器來注入倉儲,配置環(huán)境變量,獲取配置等。

但這里我們還沒有做的事情是,將這個應(yīng)用轉(zhuǎn)換為Windows服務(wù)。。

將我們的應(yīng)用轉(zhuǎn)換成Window服務(wù)

為了將應(yīng)用轉(zhuǎn)換成Windows服務(wù),我們需要使用如下命令引入一個包。

Install-Package Microsoft.Extensions.Hosting.WindowsServices

下一步,我們需要修改Program.cs文件,添加UseWindowsService()方法的調(diào)用。

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureServices((hostContext, services) =>{services.AddHostedService<Worker>();}).UseWindowsService();

以上就是所有需要變更的代碼。

運行我們的程序,你會發(fā)現(xiàn)和之前的效果完全樣。但是這里最大的區(qū)別是,我們可以將當前應(yīng)用以Windows服務(wù)的形式安裝了。

為了實現(xiàn)這一目的,我們需要發(fā)布當前項目。在當前項目目錄中,我們可以運行以下命令:

dotnet publish -r win-x64 -c Release

然后我們就可以借助標準的Windows服務(wù)安裝器來安裝當前服務(wù)了。

sc create TestService BinPath=C:\full\path\to\publish\dir\WindowsServiceExample.exe

當前,你也可以使用Windows服務(wù)安裝器的其他命令。

sc start TestServicesc stop TestServicesc delete TestService

最后檢查一下我們的服務(wù)面板。

服務(wù)已經(jīng)正常工作了。

在Linux中運行服務(wù)

老實說,我沒有太多的Linux經(jīng)驗,但是終歸是需要了解一下...

在Linux系統(tǒng)中, 如果你希望我們編寫的“Windows”服務(wù)在Linux系統(tǒng)中作為服務(wù)運行,你需要做以下2步:

  • 使用Microsoft.Extensions.Hosting.Systemd替換之前的Microsoft.Extensions.Hosting.WindowsServices。

  • 使用UseSystemd()替換UseWindowsService()。

Microsoft vs Topshelf vs .NET Core Workers

到現(xiàn)在為止,我們已經(jīng)介紹了借助3種不同的方式來創(chuàng)建Windows服務(wù)。

你可能會問“好吧,那我到底應(yīng)該選擇哪一種?”

這里呢,我們可以首先把"Microsoft"這種老派學院式的方式拋棄。因為它的調(diào)試實在是太麻煩了,而且沒有什么實際的用處。

然后剩下的就是Topshelf和.NET Core工作器兩種方式了。在我看來,.NET Core工作器,已經(jīng)很好的融入.NET Core生態(tài)系統(tǒng),如果你正在開發(fā)ASP.NET Core應(yīng)用,那么使用.NET Core工作器就很有意義。最重要的是,當你創(chuàng)建一個后臺服務(wù)的時候,你可以讓它在一個ASP.NET Core網(wǎng)站中的任意位置運行,這非常的方便。但是缺點是安裝。你必須使用SC命令來安裝服務(wù)。這一部分Topshelf可能更勝一籌。

Topshelf總體上將非常的友好,并且具有最好的安裝方式,但是使用額外的庫,也增加了學習的成本。

所以Topshelf和.NET Core工作器,大家可以自行選擇,都是不錯的方案。

總結(jié)

以上是生活随笔為你收集整理的使用.NET Core创建Windows服务 - 使用.NET Core工作器方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。