这篇文章主要介绍了.NET Core部署为Windows服务,想要将.NET Core部署为window服务,项目中需要进行以下配置:项目中引入Microsoft.Extensions.Hosting.WindowsServices包,本文给大家详细讲解,需要的朋友可以参考下
目前测试了下面两个项目,均可以部署为Windows服务运行。部署的方式
二、.NET Core部署Windows服务
想要将.NET Core部署为window服务,项目中需要进行以下配置:项目中引入Microsoft.Extensions.Hosting.WindowsServices包
修改Program.cs文件,添加UseWindowsService()方法调用
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服务
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup()
.UseKestrel(options =>
{
options.Listen(IPAddress.Any, 50003);//指定端口号,不然如果部署了多个服务,容易出现端口号占用
options.Limits.MaxRequestBodySize = null;
}); ;
})
.UseDefaultServiceProvider(options => options.ValidateScopes = false);
}
}
}
sc.exe是帮助开发部署 WindowsNT 服务的工具,路径: C:\Windows\System32\sc.exe。
(1)将项目发布到服务器
(2)使用管理员权限运行PowerShell
(3)部署的相关命令:ServiceName是自定义的服务名称,可以自行修改
## 创建服务
sc.exe create ServiceName BinPath=C:\xx\ClearFontService\ClearFontService.exe
## 启动服务
sc.exe start ServiceName
## 停止服务
sc.exe stop ServiceName
## 删除服务
sc.exe delete ServiceName
## 添加服务描述
sc description ServiceName "描述"
## 改变服务的启动方式 手动/自动/禁用
sc.exe config ServiceName start= demand/auto/disabled
(4)创建安装脚本install.bat
set serviceName=ServiceName
set serviceFilePath=C:\xx\ClearFontService\ClearFontService.exe
set serviceDescription=服务描述
sc.exe create %serviceName% BinPath=%serviceFilePath%
sc.exe config %serviceName% start=auto
sc.exe description %serviceName% %serviceDescription%
sc.exe start %serviceName%
pause
(5)卸载服务脚本unstall.bat
set serviceName=ServiceName
sc.exe stop %serviceName%
sc.exe delete %serviceName%
pause
使用管理员权限运行脚本
环境:操作系统Centos 8系统
注册 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
#查看系统中包含的.net core runtime版本
dotnet --list-runtimes
项目中引入Microsoft.Extensions.Hosting.Systemd包
修改Program.cs文件,添加UseSystemd()方法调用,可以和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()
.UseKestrel(options =>
{
options.Listen(IPAddress.Any, 50003);
options.Limits.MaxRequestBodySize = null;
}); ;
})
.UseDefaultServiceProvider(options => options.ValidateScopes = false);
}
}
}
然后把发布文件移至linux系统
linux的服务是通过systemd守护进程部署的。现在在系统中我们有了一个发布后的应用程序,我们需要为systemd创建配置文件部署服务。步骤如下:
(1)创建一个.service文件(我们要部署服务,因此需要.service文件),填入以下内容。可以在Linux中直接创建或者通过windows创建然后拷贝至linux。
[Unit]
Description= my test app
[Service]
Type=notify
ExecStart=/usr/bin/dotnet /home/demo/WorkerService.dll
[Install]
WantedBy=multi-user.target
ystemd
,再继续往下执行(2).service文件移动至/etc/systemd/system/ 固定目录下,假设自定义文件名称为:testapp.service(如果使用其他名称,请更改testapp)
(3)使用systemctl命令重新加载新的配置文件
sudo systemctl daemon-reload
(4)查看相关服务状态
sudo systemctl status testapp
您应该看到类似以下的内容:
(5)这表明您已注册的新服务已禁用,我们可以通过运行以下命令来启动我们的服务:
sudo systemctl start testapp.service
(6)重新运行sudosystemctl status testapp 查看服务状态显示已激活正在运行中
(7)设置服务开机自启
sudo systemctl enable testapp.service
到此我们的服务已经完整的部署到了linux系统中。
(8)现在我们有一个运行了systemd的应用程序,我们可以看看日志记录集成。使用systemd的好处之一是可以使用journalctl访问的集中式日志记录系统。首先,我们可以使用journalctl(访问日志的命令)查看服务日志:
sudo journalctl -u testapp
可以看到我们的程序正在运行,可以使用↑↓ ← →查看日志内容。或者使用grep搜索。q 键退出
(9)卸载自定义服务
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
到此这篇关于.NET Core部署为Windows服务的文章就介绍到这了,更多相关.NET Core部署Windows内容请搜索本人博客以前的文章,写得不好,请大家多多指点