• 如何将.NET Core部署为Windows服务


    这篇文章主要介绍了.NET Core部署为Windows服务,想要将.NET Core部署为window服务,项目中需要进行以下配置:项目中引入Microsoft.Extensions.Hosting.WindowsServices包,本文给大家详细讲解,需要的朋友可以参考下

    一、概述

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

     二、.NET Core部署Windows服务

    1、项目中需要的配置

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

     修改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)将项目发布到服务器

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

     (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 密钥和源

     sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

    安装 .NET Core SDK:

    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包

     修改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:当前服务启动完毕,会通知Systemd,再继续往下执行
    • ExecStart:启动当前服务的命令,程序如何启动,第一个路径是固定路径。第二个路径是应用程序的dll路径(可以自定义)
    • WantedBy:表示该服务所在的 Target服务组, multi-user.target,表示多用户命令行状态。 

    (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)卸载自定义服务

    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内容请搜索本人博客以前的文章,写得不好,请大家多多指点

  • 相关阅读:
    顺序结构与选择结构
    AtCoder Beginner Contest 278 G.Generalized Subtraction Game(思维题/博弈 multi-sg)
    从 Wepy 到 UniApp 变形记
    正确使用 Unicode 和 MBCS 字符集
    http之basic authentication浅析
    jvm zgc使用的染色指针为什么比写屏障效率高,两者都是修改引用的时候触发
    SpringCloud之Ribbon负载均衡解读
    SpringBoot整合Websocket,实现作为客户端接收消息的同时作为服务端向下游客户发送消息
    labelme 使用笔记
    中睿天下荣获2023全国智能驾驶测试赛车联网安全比赛第一名
  • 原文地址:https://blog.csdn.net/lwf3115841/article/details/127587068