.NET?Core部署為Windows服務(wù)的詳細步驟
一、概述
目前測試了下面兩個項目,均可以部署為Windows服務(wù)運行。部署的方式

二、.NET Core部署Windows服務(wù)
1、項目中需要的配置
想要將.NET Core部署為window服務(wù),項目中需要進行以下配置:項目中引入Microsoft.Extensions.Hosting.WindowsServices包

修改Program.cs文件,添加UseWindowsService()方法調(diào)用
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using System.Net;
namespace XXService
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)//使用默認配置實例化Host主機
.UseWindowsService()//指定項目可以部署為Windows服務(wù)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>()
.UseKestrel(options =>
{
options.Listen(IPAddress.Any, 50003);//指定端口號,不然如果部署了多個服務(wù),容易出現(xiàn)端口號占用
options.Limits.MaxRequestBodySize = null;
}); ;
})
.UseDefaultServiceProvider(options => options.ValidateScopes = false);
}
}
}2、服務(wù)器中使用sc.exe工具部署Windows服務(wù)
sc.exe是幫助開發(fā)部署 WindowsNT 服務(wù)的工具,路徑: C:\Windows\System32\sc.exe。
(1)將項目發(fā)布到服務(wù)器

(2)使用管理員權(quán)限運行PowerShell

(3)部署的相關(guān)命令:ServiceName是自定義的服務(wù)名稱,可以自行修改
## 創(chuàng)建服務(wù) sc.exe create ServiceName BinPath=C:\xx\ClearFontService\ClearFontService.exe ## 啟動服務(wù) sc.exe start ServiceName ## 停止服務(wù) sc.exe stop ServiceName ## 刪除服務(wù) sc.exe delete ServiceName ## 添加服務(wù)描述 sc description ServiceName "描述" ## 改變服務(wù)的啟動方式 手動/自動/禁用 sc.exe config ServiceName start= demand/auto/disabled
(4)創(chuàng)建安裝腳本install.bat
set serviceName=ServiceName set serviceFilePath=C:\xx\ClearFontService\ClearFontService.exe set serviceDescription=服務(wù)描述 sc.exe create %serviceName% BinPath=%serviceFilePath% sc.exe config %serviceName% start=auto sc.exe description %serviceName% %serviceDescription% sc.exe start %serviceName% pause
(5)卸載服務(wù)腳本unstall.bat
set serviceName=ServiceName sc.exe stop %serviceName% sc.exe delete %serviceName% pause
使用管理員權(quán)限運行腳本
三、NetCore項目部署為Linux服務(wù)
環(huán)境:操作系統(tǒng)Centos 8系統(tǒng)
1、安裝 .net core相關(guān)環(huán)境
注冊 Microsoft 密鑰和源:
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
安裝 .NET Core SDK:
sudo yum install aspnetcore-runtime-3.1
安裝完成之后驗證:
# 驗證dotnet core runtime是否安裝成功 dotnet --version #查看系統(tǒng)中包含的.net core runtime版本 dotnet --list-runtimes
2、項目中需要的配置
項目中引入Microsoft.Extensions.Hosting.Systemd包

修改Program.cs文件,添加UseSystemd()方法調(diào)用,可以和UseWindowsService()共存
using?Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.Hosting;
using System.Net;
namespace ClearFontService
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)//使用默認配置實例化Host主機
.UseWindowsService()
.UseSystemd()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>()
.UseKestrel(options =>
{
options.Listen(IPAddress.Any, 50003);
options.Limits.MaxRequestBodySize = null;
}); ;
})
.UseDefaultServiceProvider(options => options.ValidateScopes = false);
}
}
}然后把發(fā)布文件移至linux系統(tǒng)
3、部署服務(wù)
linux的服務(wù)是通過systemd守護進程部署的?,F(xiàn)在在系統(tǒng)中我們有了一個發(fā)布后的應(yīng)用程序,我們需要為systemd創(chuàng)建配置文件部署服務(wù)。步驟如下:
(1)創(chuàng)建一個.service文件(我們要部署服務(wù),因此需要.service文件),填入以下內(nèi)容。可以在Linux中直接創(chuàng)建或者通過windows創(chuàng)建然后拷貝至linux。
[Unit] Description= my test app [Service] Type=notify ExecStart=/usr/bin/dotnet /home/demo/WorkerService.dll [Install] WantedBy=multi-user.target
- Description:描述,看個人需要是否添加。不需要可以去掉。只留下 [Service] 和 [Install]
- Type=notify:當前服務(wù)啟動完畢,會通知S
ystemd,再繼續(xù)往下執(zhí)行 - ExecStart:啟動當前服務(wù)的命令,程序如何啟動,第一個路徑是固定路徑。第二個路徑是應(yīng)用程序的dll路徑(可以自定義)
- WantedBy:表示該服務(wù)所在的 Target服務(wù)組, multi-user.target,表示多用戶命令行狀態(tài)。
(2).service文件移動至/etc/systemd/system/ 固定目錄下,假設(shè)自定義文件名稱為:testapp.service(如果使用其他名稱,請更改testapp)

(3)使用systemctl命令重新加載新的配置文件
sudo systemctl daemon-reload
(4)查看相關(guān)服務(wù)狀態(tài)
sudo systemctl status testapp
您應(yīng)該看到類似以下的內(nèi)容:

(5)這表明您已注冊的新服務(wù)已禁用,我們可以通過運行以下命令來啟動我們的服務(wù):
sudo systemctl start testapp.service
(6)重新運行sudosystemctl status testapp 查看服務(wù)狀態(tài)顯示已激活正在運行中

(7)設(shè)置服務(wù)開機自啟
sudo systemctl enable testapp.service
到此我們的服務(wù)已經(jīng)完整的部署到了linux系統(tǒng)中。
(8)現(xiàn)在我們有一個運行了systemd的應(yīng)用程序,我們可以看看日志記錄集成。使用systemd的好處之一是可以使用journalctl訪問的集中式日志記錄系統(tǒng)。首先,我們可以使用journalctl(訪問日志的命令)查看服務(wù)日志:
sudo journalctl -u testapp

可以看到我們的程序正在運行,可以使用↑↓ ← →查看日志內(nèi)容。或者使用grep搜索。q 鍵退出
(9)卸載自定義服務(wù)
servicename=testapp.service systemctl stop $servicename systemctl disable $servicename rm -rf /etc/systemd/system/$servicename rm -rf /etc/systemd/system/$servicename symlinks that might be related systemctl daemon-reload systemctl reset-failed
到此這篇關(guān)于.NET Core部署為Windows服務(wù)的文章就介紹到這了,更多相關(guān).NET Core部署Windows內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何使用簽名保證ASP.NET MVC OR WEBAPI的接口安全
這篇文章主要介紹了如何使用簽名保證ASP.NET MVC OR WEBAPI的接口安全,幫助大家更好的理解和學(xué)習(xí)使用.net技術(shù),感興趣的朋友可以了解下2021-04-04
.NET使用結(jié)構(gòu)體替代類提升性能優(yōu)化的技巧
這篇文章主要介紹了.NET使用結(jié)構(gòu)體替代類提升性能優(yōu)化的技巧,使用結(jié)構(gòu)體替代類有什么好處呢?在什么樣的場景需要使用結(jié)構(gòu)體來替代類呢?今天的文章為大家一一解答,需要的朋友可以參考下2022-05-05
.NET微服務(wù)架構(gòu)CI/CD鏡像自動分發(fā)
這篇文章介紹了.NET微服務(wù)架構(gòu)CI/CD實現(xiàn)鏡像自動分發(fā)的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01
asp.net不同頁面間數(shù)據(jù)傳遞的多種方法
這篇文章主要介紹了asp.net不同頁面間數(shù)據(jù)傳遞的多種方法,包括使用QueryString顯式傳遞、頁面對象的屬性、cookie、Cache等9種方法2014-01-01
CommunityServer又稱CS論壇的相關(guān)學(xué)習(xí)資料
以前項目需要整合這個論壇,同事找了一些資料,現(xiàn)在放上來,并說下自己對這個論壇的看法。2009-05-05
靜態(tài)gb2312編碼在項目傳值出現(xiàn)中文亂碼現(xiàn)象
參考的美工靜態(tài)頁面是gb2312格式的,當此編碼拿到項目中后,utf-8編碼的系統(tǒng),加載頁面時,會出現(xiàn)樣式問題,比如不能正常居中等2013-06-06
Asp.net獲取服務(wù)器指定文件夾目錄文件并提供下載的方法
這篇文章主要介紹了Asp.net獲取服務(wù)器指定文件夾目錄文件并提供下載的方法,涉及使用http協(xié)議操作文件的技巧,需要的朋友可以參考下2015-01-01

