搜索

查看: 3098|回复: 11

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

[复制链接]
发表于 2023-5-4 11:24:29 | 显示全部楼层 |阅读模式
Editor 2023-5-4 11:24:29 3098 11 看全部
目录
  • 一、概述
  • 二、.NET Core部署Windows服务
  • 1、项目中需要的配置
  • 2、服务器中使用sc.exe工具部署Windows服务
  • 三、NetCore项目部署为Linux服务
  • 1、安装 .net core相关环境
  • 2、项目中需要的配置
  • 3、部署服务
    一、概述
    目前测试了下面两个项目,均可以部署为Windows服务运行。部署的方式

    2022102511022823.png

    2022102511022823.png


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

    2022102511022824.png

    2022102511022824.png


    修改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);
            }
        }
    }
    2、服务器中使用sc.exe工具部署Windows服务
    sc.exe是帮助开发部署 WindowsNT 服务的工具,路径: C:\Windows\System32\sc.exe。
    (1)将项目发布到服务器

    2022102511022825.png

    2022102511022825.png


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

    2022102511022826.png

    2022102511022826.png


    (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
    使用管理员权限运行脚本

    三、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
    安装完成之后验证:
    # 验证dotnet core runtime是否安装成功
    dotnet --version
    #查看系统中包含的.net core runtime版本
    dotnet --list-runtimes
    2、项目中需要的配置
    项目中引入Microsoft.Extensions.Hosting.Systemd包

    2022102511022827.png

    2022102511022827.png


    修改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系统

    3、部署服务
    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
  • Description:描述,看个人需要是否添加。不需要可以去掉。只留下 [Service] 和 [Install]
  • Type=notify:当前服务启动完毕,会通知Systemd,再继续往下执行
  • ExecStart:启动当前服务的命令,程序如何启动,第一个路径是固定路径。第二个路径是应用程序的dll路径(可以自定义)
  • WantedBy:表示该服务所在的 Target服务组, multi-user.target,表示多用户命令行状态。
    (2).service文件移动至/etc/systemd/system/ 固定目录下,假设自定义文件名称为:testapp.service(如果使用其他名称,请更改testapp)

    2022102511022828.png

    2022102511022828.png


    (3)使用systemctl命令重新加载新的配置文件
    sudo systemctl daemon-reload
    (4)查看相关服务状态
    sudo systemctl status testapp
    您应该看到类似以下的内容:

    2022102511022829.png

    2022102511022829.png


    (5)这表明您已注册的新服务已禁用,我们可以通过运行以下命令来启动我们的服务:
    sudo systemctl start testapp.service
    (6)重新运行sudosystemctl status testapp 查看服务状态显示已激活正在运行中

    2022102511022930.png

    2022102511022930.png


    (7)设置服务开机自启
    sudo systemctl enable testapp.service
    到此我们的服务已经完整的部署到了linux系统中。
    (8)现在我们有一个运行了systemd的应用程序,我们可以看看日志记录集成。使用systemd的好处之一是可以使用journalctl访问的集中式日志记录系统。首先,我们可以使用journalctl(访问日志的命令)查看服务日志:
    sudo journalctl -u testapp

    2022102511022931.jpg

    2022102511022931.jpg


    可以看到我们的程序正在运行,可以使用↑↓ ← →查看日志内容。或者使用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内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛
  • 回复

    使用道具 举报

    发表于 2023-6-28 21:04:30 | 显示全部楼层
    风吹吹蛋蛋疼风w 2023-6-28 21:04:30 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    回复

    使用道具 举报

    发表于 2023-6-28 22:39:44 | 显示全部楼层
    惜颜705 2023-6-28 22:39:44 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-29 19:53:45 | 显示全部楼层
    墙和鸡蛋 2023-6-29 19:53:45 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    回复

    使用道具 举报

    发表于 2023-6-29 23:15:57 | 显示全部楼层
    123456865 2023-6-29 23:15:57 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    发表于 2023-6-30 20:17:00 | 显示全部楼层
    计划你大爷计j 2023-6-30 20:17:00 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-7-1 01:05:50 | 显示全部楼层
    123456868 2023-7-1 01:05:50 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-7-4 11:11:17 | 显示全部楼层
    风来时狂放 2023-7-4 11:11:17 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    回复

    使用道具 举报

    发表于 2023-7-4 12:06:40 | 显示全部楼层
    老橡树1 2023-7-4 12:06:40 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-7-4 23:33:05 | 显示全部楼层
    向往草原403 2023-7-4 23:33:05 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 知鸟论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表