解决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服务的版本,
更重要的是为了记录一下这个问题吧,方便自己查阅,好记性不如烂笔头嘛
本文来自博客园,作者:汪小让,转载请注明原文链接:https://www.cnblogs.com/wangxiaorang/p/14836997.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构