You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SignalR部署至IIS后2秒自动断开连接问题求助

IIS部署Asp.net Core SignalR v3.1.0连接2秒自动断开问题排查

问题概述

使用Aspnetcore.SignalR.core v3.1.0开发的Web应用,本地环境下服务器与客户端可正常建立并维持连接,但部署至Windows Server的IIS后,SignalR连接会在2秒后自动断开。对比日志发现:

  • 本地:客户端发送86字节数据后,服务器返回44字节数据,后续持续交换保活包
  • IIS部署:客户端发送86字节数据后,服务器无返回,随后Socket突然关闭,连接终止

已尝试调整KeepaliveInterval和ClientTimeoutInterval参数,问题未解决,相关配置如下:

services.AddSignalR(hubOptions =>
{
    hubOptions.EnableDetailedErrors = true;
    hubOptions.KeepAliveInterval = TimeSpan.FromMilliseconds(10000); //10 secs
    hubOptions.ClientTimeoutInterval = TimeSpan.FromMilliseconds(110000); //110 secs

})
.AddJsonProtocol(options =>
{
    options.PayloadSerializerOptions.PropertyNamingPolicy = null;
});

排查方向与解决方案

1. 确认IIS WebSocket协议已启用

SignalR默认优先使用WebSocket传输,若IIS未开启WebSocket功能,会导致传输降级异常甚至连接中断。

  • 操作步骤:打开服务器管理器 → 添加角色和功能 → 依次选择Web服务器(IIS) → 应用开发 → 勾选WebSocket协议,完成安装后重启IIS。

2. 检查IIS请求限制与超时配置

IIS的请求筛选或连接超时设置可能拦截SignalR的数据包:

  • 打开IIS站点的请求筛选 → 编辑功能设置,确保最大允许内容长度足够(建议设为10MB以上);
  • 检查站点高级设置中的连接超时,建议设置为大于SignalR的ClientTimeoutInterval值;
  • 临时禁用IIS的快速失败保护,排除因应用池短暂异常导致的连接中断。

3. 验证应用池配置

Asp.net Core应用需使用正确的应用池设置:

  • 应用池的**.NET CLR版本必须选择无托管代码**;
  • 确保应用池的身份拥有应用程序目录的读写权限(尤其是日志目录);
  • 尝试重启应用池,排除池内进程异常的影响。

4. 排查服务器防火墙/安全软件拦截

服务器防火墙或第三方安全软件可能拦截WebSocket的握手请求或后续数据包:

  • 临时关闭防火墙测试连接是否正常;
  • 检查安全软件日志,确认是否有拦截SignalR相关流量的记录。

5. 强制切换SignalR传输方式

测试使用长轮询传输,判断是否为WebSocket特定问题:

  • 客户端代码中强制指定传输类型:
const connection = new signalR.HubConnectionBuilder()
    .withUrl("/yourHubPath", {
        transport: signalR.HttpTransportType.LongPolling
    })
    .build();

若长轮询能稳定连接,说明问题集中在WebSocket的IIS配置上。

6. 匹配Asp.net Core托管包版本

服务器上安装的Asp.net Core Hosting Bundle版本需与应用使用的v3.1.0匹配:

  • 卸载服务器上不兼容的托管包,安装对应3.1.x版本的托管包;
  • 安装完成后重启IIS和应用池。

7. 开启详细日志排查

启用SignalR的Debug级日志,获取连接过程的详细错误信息:

  • 在appsettings.json中添加日志配置:
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore.SignalR": "Debug",
      "Microsoft.AspNetCore.Http.Connections": "Debug"
    }
  }
}
  • 部署后查看应用日志,重点关注握手阶段、消息处理阶段的异常信息。

8. 检查Web.config配置

确保Web.config中的AspNetCoreModule配置正确:

  • 确认使用AspNetCoreModuleV2模块;
  • 尝试切换hostingModel为inprocess或outofprocess,测试是否解决问题:
<aspNetCore processPath="dotnet" arguments=".\YourApp.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />

内容的提问来源于stack exchange,提问作者Pankaj Shelar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 01:36:20