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

部署于IIS的SignalR WebSocket连接失败问题求助

IIS部署SignalR WebSocket连接失败的解决方案

排查与解决步骤

1. 确认IIS WebSocket协议配置(服务器+站点级)

  • 服务器级:打开IIS管理器,选中服务器节点,在功能视图中找到WebSocket协议,确认已安装
  • 站点级:选中目标站点,功能视图中打开WebSocket协议,确保状态为启用

2. 调整客户端连接配置,移除跳过协商设置

IIS环境下强制跳过协商会导致WebSocket连接无法正确获取连接ID,修改客户端代码:

NLHubConnection.connection = new signalR.HubConnectionBuilder()
    .withAutomaticReconnect()
    .withUrl(`${this._serverBaseUrl}/hub`, {
        accessTokenFactory: () => accessToken,
        // 移除 skipNegotiation: true 和强制传输配置
        // 让客户端自动协商并选择最优传输方式
    })
    .configureLogging("warn")
    .build();

如果必须指定WebSocket传输,不要跳过协商,保留协商步骤:

NLHubConnection.connection = new signalR.HubConnectionBuilder()
    .withAutomaticReconnect()
    .withUrl(`${this._serverBaseUrl}/hub`, {
        accessTokenFactory: () => accessToken,
        transport: signalR.HttpTransportType.WebSockets
        // 不要设置 skipNegotiation: true
    })
    .configureLogging("warn")
    .build();

3. 检查应用池配置

针对ASP.NET Core应用,应用池必须设置为:

  • 托管管道模式:集成
  • .NET CLR版本:无托管代码
    操作路径:IIS管理器 -> 应用池 -> 目标应用池 -> 高级设置

4. 验证端口与防火墙设置

  • 确认服务器防火墙允许端口4231的入站HTTP(对应ws协议)流量
  • 如果使用反向代理(如ARR),需启用WebSocket代理支持,确保代理不会拦截WebSocket帧

5. 确认服务器端SignalR路由配置

检查Program.cs(ASP.NET Core 6+)或Startup.cs中的路由配置,确保Hub端点正确映射:

// ASP.NET Core 6+ 示例
app.MapHub<YourHubClass>("/hub");

同时确保认证中间件不会错误拦截Hub请求,JWT令牌需能被服务器正确验证。

6. 查看日志定位问题

  • 查看IIS站点日志(默认路径C:\inetpub\logs\LogFiles),检查WebSocket请求的状态码(如401/403/500)
  • 查看应用内部日志,确认服务器端是否有SignalR连接相关的异常信息

内容的提问来源于stack exchange,提问作者Levan Shengelia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:43:22