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

Microsoft.AspNet.SignalR设置DisconnectTimeout=6秒不生效问题求助

SignalR 客户端断开后OnDisconnected延迟触发的解决建议

配置有效性验证

  • 确认配置是否真正生效:在Application_Start配置代码后添加日志输出,打印GlobalHost.Configuration.DisconnectTimeout和KeepAlive的实际值,排查是否因代码执行顺序问题导致配置被覆盖。
  • 检查全局配置冲突:确认项目中是否存在Owin Startup类或其他初始化代码,是否修改了GlobalHost.Configuration参数,导致你的超时设置被覆盖。

传输方式针对性调整

  • 优化长轮询传输:若使用长轮询,其默认30秒的HTTP超时会叠加DisconnectTimeout,导致总延迟接近40秒。手动设置ConnectionTimeout(需小于等于DisconnectTimeout):
    GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(6);
    
  • 优先启用WebSockets:WebSockets具备原生高效断开检测机制,能更快感知连接丢失。确保服务器已启用WebSockets功能(IIS中需开启对应组件),且客户端浏览器支持该传输方式。

客户端主动干预

  • 监听网络状态:在客户端监听浏览器online/offline事件,检测到离线时主动调用$.connection.hub.stop(),触发服务器立即执行OnDisconnected,无需等待超时。
  • 同步客户端心跳配置:显式设置客户端的心跳参数,与服务器配置对齐:
    $.connection.hub.pingInterval = 2000; // 与服务器KeepAlive一致
    $.connection.hub.disconnectTimeout = 6000; // 与服务器DisconnectTimeout一致
    

服务器环境排查

  • 检查IIS超时设置:确认应用程序池的「空闲超时」「连接超时」是否过长,避免IIS提前回收进程或维持无效连接。
  • 启用SignalR日志:开启详细日志定位延迟原因:
    GlobalHost.TraceManager.Switch.Level = SourceLevels.Information;
    

内容的提问来源于stack exchange,提问作者Rezo Khurtsilava

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 08:50:53