如何在 Windows 服务中托管 ASP.NET Core 网站程序
文章分类: 软件开发
发布日期: 2021-05-24

一、需求来源与理论探索

通常情况下,我们使用 C# 开发的 ASP.NET Core 网站程序,会通过 IIS 或 Nginx 进行部署,但有时候受限于生产环境,比如项目现场的服务器只能安装 Windows 7 操作系统,没有安装 IIS 或 IIS 的版本过低,或者其他特殊情况,需要通过其他方式运行网站程序。

不过,与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,IIS则是作为反向代理的角色转发请求到 Kestrel 不同端口的 ASP.NET Core程序中,随后就将接收到的请求推送至中间件管道中去,处理完你的请求和相关业务逻辑之后再将HTTP响应数据重新回写到IIS中,最终转达到不同的客户端(浏览器,APP,客户端等)。

所以理论上来说,ASP.NET Core 的发布程序,可以不通过IIS进行部署,也可以在控制台直接运行相应的dll,即可运行网站程序,如下图所示:

控制台方式进行网站部署.png

在浏览器地址栏输入 http://localhost:5000 ,即可查看已运行的网站首页。

其中,5000是默认的监听端口,如果需要更改为其他端口,则可以加上urls参数,如下:

dotnet website.dll --urls http://localhost:88

如果想要同时支持从localhost之外的机器,以IP的形式访问,可以把localhost替换为本机IP地址,或以 * 通配符表示。

dotnet website.dll --urls http://*:88

那么,我们就可以使用变通的方案,在 Windows 服务中对上述控制台进程进行托管,即可实现网站程序的部署。

二、微软官方方案

对此,微软官方也提供了将 ASP.NET Core 部署至 Windows 服务的解决方案,具体可参考:在 Windows 服务中托管 ASP.NET Core

但是这个方式过于繁琐,且需要更改部分代码。既然程序本身就可以通过控制台运行了,为什么不采取更直接一点的办法呢?

三、使用NSSM工具

这里我们可以借助一个工具:NSSM,官网:NSSM - the Non-Sucking Service Manager

什么是 NSSM ?简单点理解就是 NSSM 可以把一些exe程序封装成 Windows 服务,然后exe程序就像服务一样运行。而且 NSSM 功能强大,运行更简单,界面化傻瓜化处理方式。

1、先确保 ASP.NET Core 程序能够正常运行。

在控制台通过 dotnet 命令托管程序的 dll,通过浏览器检查程序的运行情况。

2、使用 NSSM 安装服务。

下载 NSSM,在 nssm.exe 的目录打开控制台窗口(cmd),运行 nssm install,就会弹出安装服务的配置界面。

NSSM安装Windows服务-01.png

Application选项卡参数说明:Path 是指 dotnet.exe 的文件路径,Startup directory 是网站程序的运行目录,Arguments 是指 dll 文件以及相应的运行参数,Service name 是指定义的服务名称。

NSSM安装Windows服务-02.png

Details选项卡参数说明:Display name 是指 Windows 服务列表中要显示的名称,Description 是 Windows 服务列表中显示的服务描述,Startup type 是指启动方式,一般选自动。

设置好所有参数之后,点击 Install service,服务即可安装到操作系统上。

NSSM安装Windows服务-03.png

3、服务的启动与管理

最后到 Windows 服务管理界面找到安装的服务名称,右键启动即可,或者直接在控制台运行 nssm start 服务名称,也可以运行 net start 服务名称。这样就可以非常简单的把.Net Core托管至Window服务中。方便管理、启动、停止等等。

四、总结与鸣谢

本文对在 Windows 服务中对 ASP.NET Core 网站程序进行托管的方法进行了探讨,并介绍了 NSSM
这个工具的用法,其实我们可以发现,NSSM 并不仅仅可以部署 .NET 网站程序,凡是可以从控制台进行监听运行的程序,都可以使用 NSSM 封装到 Windows 服务中进行运行和管理。

本文主要参考了这篇文章:使用NSSM把.Net Core部署至 Windows 服务

在此向原作者表示感谢!


创建时间: 2021-04-06 17:35:08
更新时间: 2021-05-24 13:26:30