在Windows服务中托管.Net Core项目

首先我现在的项目是一个基于.Net Core 3.1 的 WebApi 项目

考虑使用Windows 服务托管的原因有下: 

1.如果在控制台启动, 会一直有个控制台在屏幕, 个人不喜欢

2.可以通过命令来启动,停止, 在使用Jenkins部署时会方便很多

实现

看了很多资料之后,发现这个事情还是比较简单的,不过在我这个事情的时候遇到了一个"很不应该"的坑, 所以,写个文章记录一下, 加深一下记忆.

首先需要在项目中添加一个Nuget包,如下:

Microsoft.Extensions.Hosting.WindowsServices

然后在项目的入口中添加一下代码: IHostBuilder.UseWindowsService();

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .......
                ......
                .UseWindowsService();

然后打开Powershell

使用一下命令创建Windows 服务;

// 创建服务
sc create <servicename> binPath= '<exe path>'

// <exe path> 项目编译之后,在编译目录会有一个对应的exe文件


// 启动服务
sc start <servicename>


// 停止服务
sc stop <servicename>


// 删除服务
sc delete <servicename>

至于 sc 是什么,更详细的使用方式,这里不做过多的赘述

正常来说 到这里就已经OK了,但是我在这里遇到一个坑.

https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-3.1&tabs=visual-studio#configure-endpoints

这里有一句很重要的话

请勿尝试使用 GetCurrentDirectory 来获取资源路径,因为 Windows 服务应用会返回“C:\WINDOWS\system32”文件夹作为其当前目录。

因为我在项目中使用了swagger,然后swagger的IncludeXmlComments我是用 CurrentDirectory 来处理的,

因此在服务启动之后一直报 500:

这里我们将 XML文档文件复制一份到 "C:\WINDOWS\system32" 目录下,就可以了,

我是将xml文件的路径配置到 appsettings 中处理的.

"XmlDocumentationPath": "C:/nginx/website/copper/Copper.WebService.Web.xml",



options.IncludeXmlComments(Configuration["XmlDocumentationPath"]);

另外这里有个小技巧,被我忽略了,耽误了我很多的时间;

app.UseDeveloperExceptionPage();

就是这个玩意.

有啥问题, 先把这个放出来, 可能会有意想不到的效果 . . . . . 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值