设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间05 现在时间05 缓存数据 许嵩你要为了你那句:上得厅堂也下得厨房,就像我一直在找的姑娘,而努力的姑娘负责啊。

许嵩你要为了你那句:上得厅堂也下得厨房,就像我一直在找的姑娘,而努力的姑娘负责啊。 -- 雅俗共赏

查看: 715|回复: 0

.NET Core部署为Windows服务的详细步骤

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:233
  • 打卡月天数:0
  • 打卡总奖励:3606
  • 最近打卡:2024-03-31 09:09:39
等级头衔

等級:晓枫资讯-上等兵

在线时间
78 小时

积分成就
威望
0
贡献
617
主题
641
精华
0
金钱
5817
积分
1329
注册时间
2022-12-29
最后登录
2025-5-31

发表于 2023-2-12 10:12:18 | 显示全部楼层 |阅读模式

一、概述

目前测试了下面两个项目,均可以部署为Windows服务运行。部署的方式

111355s6umhrjq7zzmm2x4.png

二、.NET Core部署Windows服务

1、项目中需要的配置

想要将.NET Core部署为window服务,项目中需要进行以下配置:项目中引入Microsoft.Extensions.Hosting.WindowsServices包

111355xogbmm8h2om78h7z.png

修改Program.cs文件,添加UseWindowsService()方法调用

  1. using Microsoft.AspNetCore.Hosting;
  2. using Microsoft.Extensions.Hosting;
  3. using System.Net;
  4. namespace XXService
  5. {
  6. public class Program
  7. {
  8. public static void Main(string[] args)
  9. {
  10. CreateHostBuilder(args).Build().Run();
  11. }
  12. public static IHostBuilder CreateHostBuilder(string[] args)
  13. {
  14. return Host.CreateDefaultBuilder(args)//使用默认配置实例化Host主机
  15. .UseWindowsService()//指定项目可以部署为Windows服务
  16. .ConfigureWebHostDefaults(webBuilder =>
  17. {
  18. webBuilder.UseStartup<Startup>()
  19. .UseKestrel(options =>
  20. {
  21. options.Listen(IPAddress.Any, 50003);//指定端口号,不然如果部署了多个服务,容易出现端口号占用
  22. options.Limits.MaxRequestBodySize = null;
  23. }); ;
  24. })
  25. .UseDefaultServiceProvider(options => options.ValidateScopes = false);
  26. }
  27. }
  28. }
复制代码

2、服务器中使用sc.exe工具部署Windows服务

sc.exe是帮助开发部署 WindowsNT 服务的工具,路径: C:\Windows\System32\sc.exe。

(1)将项目发布到服务器

111355zy6nz4y4f8sky8nq.png

(2)使用管理员权限运行PowerShell

111355ochy93hayy9zkk9g.png

(3)部署的相关命令:ServiceName是自定义的服务名称,可以自行修改

  1. ## 创建服务
  2. sc.exe create ServiceName BinPath=C:\xx\ClearFontService\ClearFontService.exe
  3. ## 启动服务
  4. sc.exe start ServiceName
  5. ## 停止服务
  6. sc.exe stop ServiceName
  7. ## 删除服务
  8. sc.exe delete ServiceName
  9. ## 添加服务描述
  10. sc description ServiceName "描述"
  11. ## 改变服务的启动方式 手动/自动/禁用
  12. sc.exe config ServiceName start= demand/auto/disabled
复制代码

(4)创建安装脚本install.bat

  1. set serviceName=ServiceName
  2. set serviceFilePath=C:\xx\ClearFontService\ClearFontService.exe
  3. set serviceDescription=服务描述
  4. sc.exe create %serviceName% BinPath=%serviceFilePath%
  5. sc.exe config %serviceName% start=auto
  6. sc.exe description %serviceName% %serviceDescription%
  7. sc.exe start %serviceName%
  8. pause
复制代码

(5)卸载服务脚本unstall.bat

  1. set serviceName=ServiceName
  2. sc.exe stop %serviceName%
  3. sc.exe delete %serviceName%
  4. pause
复制代码

使用管理员权限运行脚本

三、NetCore项目部署为Linux服务

环境:操作系统Centos 8系统

1、安装 .net core相关环境

注册 Microsoft 密钥和源:

  1. sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
复制代码

安装 .NET Core SDK:

  1. sudo yum install aspnetcore-runtime-3.1
复制代码

安装完成之后验证:

  1. # 验证dotnet core runtime是否安装成功
  2. dotnet --version
  3. #查看系统中包含的.net core runtime版本
  4. dotnet --list-runtimes
复制代码

2、项目中需要的配置

项目中引入Microsoft.Extensions.Hosting.Systemd包

111355gr9o7bfu7grltxqz.png

修改Program.cs文件,添加UseSystemd()方法调用,可以和UseWindowsService()共存

  1. using Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.Hosting;
  2. using System.Net;
  3. namespace ClearFontService
  4. {
  5. public class Program
  6. {
  7. public static void Main(string[] args)
  8. {
  9. CreateHostBuilder(args).Build().Run();
  10. }
  11. public static IHostBuilder CreateHostBuilder(string[] args)
  12. {
  13. return Host.CreateDefaultBuilder(args)//使用默认配置实例化Host主机
  14. .UseWindowsService()
  15. .UseSystemd()
  16. .ConfigureWebHostDefaults(webBuilder =>
  17. {
  18. webBuilder.UseStartup<Startup>()
  19. .UseKestrel(options =>
  20. {
  21. options.Listen(IPAddress.Any, 50003);
  22. options.Limits.MaxRequestBodySize = null;
  23. }); ;
  24. })
  25. .UseDefaultServiceProvider(options => options.ValidateScopes = false);
  26. }
  27. }
  28. }
复制代码

然后把发布文件移至linux系统

3、部署服务

linux的服务是通过systemd守护进程部署的。现在在系统中我们有了一个发布后的应用程序,我们需要为systemd创建配置文件部署服务。步骤如下:

(1)创建一个.service文件(我们要部署服务,因此需要.service文件),填入以下内容。可以在Linux中直接创建或者通过windows创建然后拷贝至linux。

  1. [Unit]
  2. Description= my test app
  3. [Service]
  4. Type=notify
  5. ExecStart=/usr/bin/dotnet /home/demo/WorkerService.dll
  6. [Install]
  7. WantedBy=multi-user.target
复制代码
  • Description:描述,看个人需要是否添加。不需要可以去掉。只留下 [Service] 和 [Install]
  • Type=notify:当前服务启动完毕,会通知S
    1. ystemd
    复制代码
    ,再继续往下执行
  • ExecStart:启动当前服务的命令,程序如何启动,第一个路径是固定路径。第二个路径是应用程序的dll路径(可以自定义)
  • WantedBy:表示该服务所在的 Target服务组, multi-user.target,表示多用户命令行状态。 

(2).service文件移动至/etc/systemd/system/ 固定目录下,假设自定义文件名称为:testapp.service(如果使用其他名称,请更改testapp)

111356rp91k44rpgeex177.png

(3)使用systemctl命令重新加载新的配置文件

  1. sudo systemctl daemon-reload
复制代码

(4)查看相关服务状态

  1. sudo systemctl status testapp
复制代码

您应该看到类似以下的内容:

111356uoyo4uzu2a9mg5d5.png

(5)这表明您已注册的新服务已禁用,我们可以通过运行以下命令来启动我们的服务:

  1. sudo systemctl start testapp.service
复制代码

(6)重新运行sudosystemctl status testapp 查看服务状态显示已激活正在运行中

111356y1un3wbzwpd3ud1u.png

(7)设置服务开机自启

  1. sudo systemctl enable testapp.service
复制代码

到此我们的服务已经完整的部署到了linux系统中。

(8)现在我们有一个运行了systemd的应用程序,我们可以看看日志记录集成。使用systemd的好处之一是可以使用journalctl访问的集中式日志记录系统。首先,我们可以使用journalctl(访问日志的命令)查看服务日志:

  1. sudo journalctl -u testapp
复制代码

111356guuulkwer2mfexus.jpeg

可以看到我们的程序正在运行,可以使用↑↓ ← →查看日志内容。或者使用grep搜索。q 键退出

(9)卸载自定义服务

  1. servicename=testapp.service
  2. systemctl stop $servicename
  3. systemctl disable $servicename
  4. rm -rf /etc/systemd/system/$servicename
  5. rm -rf /etc/systemd/system/$servicename symlinks that might be related
  6. systemctl daemon-reload
  7. systemctl reset-failed
复制代码

到此这篇关于.NET Core部署为Windows服务的文章就介绍到这了,更多相关.NET Core部署Windows内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表