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

.NET SignalR客户端无法通过任何传输方式连接服务器求助

SignalR WebSocket连接故障排查方案

核心排查方向

结合本地正常、Azure虚拟机+ngrok异常、Postman可连接的场景,重点排查以下几点:

1. IIS Express与ngrok转发配置

  • 确认ngrok转发端口与IIS Express监听端口完全匹配,同时修改.vs/config/applicationhost.config,将IIS Express的绑定地址从localhost改为*或虚拟机公网IP,允许远程连接。
  • 查看ngrok日志,确认SignalR的所有传输请求都被正确转发到IIS Express,无拦截或路由错误。

2. SignalR专属CORS配置

SignalR对CORS有特殊要求,即使常规配置正确也需核对:

  • 禁止AllowAnyOrigin()与AllowCredentials()搭配使用,需明确指定客户端源地址:
    services.AddCors(options =>
    {
        options.AddPolicy("SignalRCors", policy =>
        {
            policy.WithOrigins("https://your-client-domain", "http://localhost:3000")
                  .AllowAnyMethod()
                  .AllowAnyHeader()
                  .AllowCredentials();
        });
    });
    
  • 确保SignalR端点绑定CORS策略:
    app.UseCors("SignalRCors");
    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHub<YourHub>("/hub-path").RequireCors("SignalRCors");
    });
    

3. 传输方式与网络限制

  • 检查Azure虚拟机防火墙/安全组,确认开放了WebSocket默认端口(80/443),且Windows功能中已启用「WebSocket协议」。
  • 强制客户端仅使用WebSocket传输,排除其他方式干扰:
    const connection = new signalR.HubConnectionBuilder()
        .withUrl("https://your-ngrok-address/hub-path", {
            transport: signalR.HttpTransportType.WebSockets
        })
        .build();
    

4. Autodesk Forge回调适配

  • 确认Forge服务器的回调地址为ngrok公网地址,且该地址已加入CORS允许源列表。
  • 检查Forge回调请求是否携带SignalR要求的Connection-Token等参数,避免被服务器拦截。

5. 日志调试

  • 开启服务器端SignalR详细日志,获取连接失败具体原因:
    // appsettings.json
    {
        "Logging": {
            "LogLevel": {
                "Microsoft.AspNetCore.SignalR": "Debug",
                "Microsoft.AspNetCore.Http.Connections": "Debug"
            }
        }
    }
    
  • 客户端添加错误日志:
    connection.onclose(error => console.error("连接关闭错误:", error));
    connection.start().catch(err => console.error("启动失败:", err));
    

代码检查点

Startup.cs关键配置

  • 已添加SignalR服务:services.AddSignalR();
  • 已启用WebSocket中间件:app.UseWebSockets();(ASP.NET Core 3.0+虽自动启用,手动添加更稳妥)
  • CORS配置在UseRouting()前调用,且SignalR端点绑定了对应策略。

客户端关键检查

  • withUrl使用ngrok公网地址,而非localhost
  • 无错误的请求头或凭据配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:05:56