服务端Blazor部署到IIS后WebSocket连接失败请求pending如何排查
Server Side Blazor IIS部署WebSocket pending问题排查方案
第一步:确认IIS WebSocket功能已安装
Windows服务器默认不开启WebSocket支持,需要手动安装:打开服务器管理器→添加角色和功能→展开「Web服务器(IIS)」→「应用程序开发」→勾选WebSocket协议,安装后重启IIS生效。第二步:检查web.config配置
确认站点根目录的web.config不存在禁用WebSocket的配置,删除或修改<webSocket enabled="false" />为<webSocket enabled="true" />;同时确认ASP.NET Core模块配置正确,无需额外修改模块默认的WebSocket代理规则。第三步:确认应用服务配置正确
代码中必须添加反向代理头转发中间件,在管道配置开头加入app.UseForwardedHeaders(),确保SignalR可以正确识别客户端的请求协议;如果站点配置了HTTPS,还需要确保ForwardedHeaders配置包含X-Forwarded-Proto头。第四步:检查应用池配置
站点对应的应用池需将*.NET CLR版本*设置为无托管代码,托管管道模式设置为集成模式,否则IIS会错误拦截.NET Core的WebSocket请求。第五步:排查规则与拦截限制
- 检查IIS的URL重写规则,不要对
/_blazor、/_blazor/negotiate开头的请求做重定向、拦截处理,尤其是HTTP转HTTPS的规则不要截断WebSocket握手请求 - 确认服务器防火墙、WAF、IP限制规则没有拦截WebSocket请求,WebSocket默认使用和站点相同的端口,不需要额外开端口,但部分WAF会识别并拦截异常WebSocket帧
- 检查IIS的URL重写规则,不要对
第六步:日志定位具体故障点
- 应用日志:在
appsettings.json中调整日志级别,将Microsoft.AspNetCore.SignalR、Microsoft.AspNetCore.Http.Connections的日志级别设为Debug,重启应用后复现问题,查看日志中的具体报错 - IIS失败请求跟踪:为站点添加失败请求跟踪规则,针对状态码101、超时的请求开启跟踪,可定位请求卡在IIS的哪个处理模块
- 应用日志:在
第七步:排除应用本身问题
直接在服务器本地访问Kestrel的监听端口(默认5000/5001),绕过IIS直接访问应用,如果WebSocket可以正常连接,即可确认故障出在IIS侧配置,无需排查应用代码逻辑。

内容的提问来源于stack exchange,提问作者d00d
相关产品推荐
相关产品推荐

