一、需求来源与理论探索
通常情况下,我们使用 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,即可运行网站程序,如下图所示:
在浏览器地址栏输入 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,就会弹出安装服务的配置界面。
Application选项卡参数说明:Path 是指 dotnet.exe 的文件路径,Startup directory 是网站程序的运行目录,Arguments 是指 dll 文件以及相应的运行参数,Service name 是指定义的服务名称。
Details选项卡参数说明:Display name 是指 Windows 服务列表中要显示的名称,Description 是 Windows 服务列表中显示的服务描述,Startup type 是指启动方式,一般选自动。
设置好所有参数之后,点击 Install service,服务即可安装到操作系统上。
3、服务的启动与管理
最后到 Windows 服务管理界面找到安装的服务名称,右键启动即可,或者直接在控制台运行 nssm start 服务名称,也可以运行 net start 服务名称。这样就可以非常简单的把.Net Core托管至Window服务中。方便管理、启动、停止等等。
四、总结与鸣谢
本文对在 Windows 服务中对 ASP.NET Core 网站程序进行托管的方法进行了探讨,并介绍了 NSSM
这个工具的用法,其实我们可以发现,NSSM 并不仅仅可以部署 .NET 网站程序,凡是可以从控制台进行监听运行的程序,都可以使用 NSSM 封装到 Windows 服务中进行运行和管理。
本文主要参考了这篇文章:使用NSSM把.Net Core部署至 Windows 服务
在此向原作者表示感谢!
微信扫描二维码
在手机上观看本页