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

Posted 汪小让

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决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文件

在<PropertyGroup>节点下,添加

<OutputType>Exe</OutputType>

<RuntimeIdentifier>win10-x64</RuntimeIdentifier>

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

2)使用cmd命令发布

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

 

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

 

 

 

3)运行.exe文件

双击GDSMPlateForm.exe文件

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

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

使用Nssm 搭建windows服务

 

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

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

2)安装服务

 

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

 

 

 弹出窗口,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

 

 安装成功

3)启动服务

 

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

 

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

4)卸载服务

使用命令: sc delete GDSMService

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

 

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

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

 

以上是关于解决IIS长连接限制的坑,导致部署在IIS下的.NET Core项目假死的主要内容,如果未能解决你的问题,请参考以下文章

WIN7的IIS对并发连接数有限制么

IIS部署.net项目时需要注意

解决Web部署 svg/woff/woff2字体 404错误

虚拟主机的IIS连接数和访问流量限制各是什么

IIS在ASP.NET Core下的两种部署模式

解决IIS Web部署 svg/woff/woff2字体 404错误