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

升级到.NET 6后SignalR无法连接 Xamarin客户端长期处于连接中状态

问题排查&解决步骤

你遇到的是.NET版本升级后SignalR服务端/客户端兼容性问题,按以下优先级排查即可:

  • 第一步:确认SignalR两端版本匹配
    .NET 6 对应的SignalR服务端版本为v6.x,要求客户端的Microsoft.AspNetCore.SignalR.Client Nuget包版本必须≥v5.0,优先升级到和服务端大版本一致的v6.x版本,低于v5的旧版客户端无法兼容.NET 6的SignalR服务端,会直接卡在连接状态。
  • 第二步:校验服务端中间件配置顺序
    即使你没有修改原有Program/Startup类,也要确认中间件顺序符合.NET 6的要求:
    // 顺序不能错:先Routing → 再CORS → 最后映射Hub
    app.UseRouting();
    // 如果你配置了CORS,必须显式允许凭证,且不能用AllowAnyOrigin
    app.UseCors(builder => builder
      .WithOrigins("你的客户端允许的域名/地址")
      .AllowAnyHeader()
      .AllowAnyMethod()
      .AllowCredentials());
    app.UseEndpoints(endpoints =>
    {
      endpoints.MapHub<NotifyHub>("/hobosoft/notifier");
    });
    
    SignalR要求CORS策略必须开启AllowCredentials,否则预检请求会被拦截,导致连接卡住。
  • 第三步:适配TLS版本要求
    .NET 6默认最低支持TLS 1.2版本,Xamarin项目默认可能未启用高版本TLS:
    • Xamarin.Android:项目属性→Android选项→高级,将HttpClient实现改为AndroidClientHandler,SSL/TLS实现改为原生TLS 1.2+
    • Xamarin.iOS:项目属性→iOS生成,将HttpClient实现改为NSUrlSession
  • 第四步:针对性调整连接配置
    如果上述步骤都排查完还是连接失败,可以在客户端构建Hub连接时新增两个配置,跳过协商直接使用WebSocket协议,规避版本兼容问题:
    hubConnection = new HubConnectionBuilder()
      .WithUrl("https://10.0.0.189:9001/hobosoft/notifier", options => {
          // 原有证书验证逻辑保留
          options.HttpMessageHandlerFactory = (message) =>
          {
               if (message is HttpClientHandler clientHandler)
                   clientHandler.ServerCertificateCustomValidationCallback
                    +=(sender, certificate, chain, sslPolicyErrors) 
                    => { return true; };
               return message;
          };
          // 新增以下两行
          options.SkipNegotiation = true;
          options.Transports = Microsoft.AspNetCore.Http.Connections.HttpTransportType.WebSockets;
      })
     .WithAutomaticReconnect()
     .Build();
    
  • 可选:开启日志定位具体错误
    如果还是无法定位问题,可以在客户端构建连接时添加日志输出,直接查看连接阶段的具体报错:
    // Build之前添加
    .ConfigureLogging(logging => {
        logging.AddConsole();
        logging.SetMinimumLevel(LogLevel.Debug);
    })
    

内容的提问来源于stack exchange,提问作者Morek Povýšil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:06:11