这篇文章主要介绍了.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<Startup>()
- .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<Startup>()
- .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内容请搜索本人博客以前的文章,写得不好,请大家多多指点