解决IIS长连接限制的坑,导致部署在IIS下的.NET Core项目假死

写在前面的话

其实很多情况不需要这么麻烦,基于公司项目现状,这是比较方便的做法:把.Net Core项目发不成.exe文件,然后使用Windows服务的方式启动.exe文件

我知道可以直接将.net core项目发布成Windows服务,并且.exe也不需要通过Windows服务就可以直接运行了

一、事件起因

之前我们的项目windows平台是部署在IIS上的,但是出现一个问题:WebSocket长连接数量超过10个,IIS就罢工了,不接受任何请求,导致页面卡死(目前没有想到很好的办法解决,有好的办法请告诉我,谢谢大家),一断开websocket连接,页面就恢复正常了

二、排查过程

一开始的时候,使用IIS,长连接数超过10个页面就卡死,但是在Linux下部署没有问题的,所以,一开始就怀疑是IIS的问题,

验证方法:通过CMD命令行的方式启动项目,结果没问题

到此,基本确定只要不使用IIS部署,就不会有问题了

三、解决方案

把原有.Net Core项目发布成.exe文件(可以直接双击运行的,但是会有一个控制台窗口),然后把.exe封装到Windows服务里面

1、.Net Core项目发布成.exe文件

1)修改GDSMPlateForm.csproj文件

解决IIS长连接限制的坑,导致部署在IIS下的.NET Core项目假死

在<PropertyGroup>节点下,添加

<OutputType>Exe</OutputType>

<RuntimeIdentifier>win10-x64</RuntimeIdentifier>

注:系统类型看自己运行环境

2)使用cmd命令发布

打开cmd,进入.csproj文件所在文件夹,然后执行dotnet publish GDSMPlateForm.csproj

解决IIS长连接限制的坑,导致部署在IIS下的.NET Core项目假死

 

如上图,发布成功,发布文件路径:D:\web代码\GDSM4.1\GDSMPlateForm\GDSMPlateForm\bin\Debug\netcoreapp2.0\win10-x64\publish

 

 

 

3)运行.exe文件

双击GDSMPlateForm.exe文件

解决IIS长连接限制的坑,导致部署在IIS下的.NET Core项目假死

如上图,运行成功,可以直接在浏览器访问,http://localhost:5000

解决IIS长连接限制的坑,导致部署在IIS下的.NET Core项目假死

2、把.exe封装到Windows服务里

使用Nssm 搭建windows服务

 

1) 下载nssm :   http://www.nssm.cc/download

解决IIS长连接限制的坑,导致部署在IIS下的.NET Core项目假死

publish文件夹(文件夹名称可以随便取),放发布文件

2)安装服务

解决IIS长连接限制的坑,导致部署在IIS下的.NET Core项目假死

 

 进入cmd命令行,安装服务: nssm install GDSMService  服务名称可以随便取

 解决IIS长连接限制的坑,导致部署在IIS下的.NET Core项目假死

 

 弹出窗口,Application Path:发布文件夹的.exe文件,我的是C:\Users\JH-TEST\Downloads\nssm-2.24\nssm-2.24\win64\publish\GDSMPlateForm.exe

Startup directory:发布文件夹,我的是C:\Users\JH-TEST\Downloads\nssm-2.24\nssm-2.24\win64\publish

Arguments:不用填

最后,点击Install Service

解决IIS长连接限制的坑,导致部署在IIS下的.NET Core项目假死

 

 安装成功

3)启动服务

解决IIS长连接限制的坑,导致部署在IIS下的.NET Core项目假死

 

 可以看到刚安装的服务,右键启动

解决IIS长连接限制的坑,导致部署在IIS下的.NET Core项目假死

 

 启动成功,到此为止,把.net core发布成.exe并通过windows服务启动,就完成了

4)卸载服务

使用命令: sc delete GDSMService

注意:要先停止服务,再卸载,否则会出现虽然服务已经删了,但是之前的服务还在运行

 

总结:这个解决方案可能不是最好的,但是就目前的问题来说确实达到了目的,后续可能会考虑,改写代码,直接搞一个可以发布成windows服务的版本,

更重要的是为了记录一下这个问题吧,方便自己查阅,好记性不如烂笔头嘛

 

上一篇:实施工程师必须熟悉的技能


下一篇:python5部署:在windows平台上使用IIS部署Flask网站