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

.NET Core SignalR服务端连接.NET 3.5客户端报404错误求助

解决.NET Core 2.0 SignalR服务端与.NET 3.5客户端404问题

这问题我之前帮同事排查过,核心原因很明确:你用的.NET Core 2.0 SignalR服务端和.NET 3.5的旧版SignalR客户端完全不兼容——它们基于两套不同的通信协议和路由机制,旧客户端根本无法识别新服务端的接口结构,自然会返回404错误。

下面给你两个可行的解决方案,根据你的项目约束选择:

方案一:升级客户端框架,使用Core SignalR兼容的客户端

官方的ASP.NET Core SignalR客户端最低支持.NET Framework 4.6.1,如果你的客户端项目可以升级到这个版本及以上,这是最推荐的方案:

  1. 安装NuGet包:Microsoft.AspNetCore.SignalR.Client
  2. 修改客户端代码为Core SignalR的写法:
    var baseUrl = "https://localhost:11111";
    // 使用HubConnectionBuilder构建连接,URL指向服务端配置的hub路径
    var connection = new HubConnectionBuilder()
        .WithUrl($"{baseUrl}/notificationshub")
        .Build();
    
    // 注册客户端接收方法,注意泛型参数要和服务端调用时匹配
    connection.On<string, JObject>("appointmentConfirmation", (name, message) => {
        // 你的处理逻辑
    });
    
    // 启动连接
    await connection.StartAsync();
    

方案二:保留.NET 3.5客户端,改用旧版ASP.NET SignalR服务端

如果客户端必须停留在.NET 3.5,那服务端需要切换到传统的ASP.NET SignalR(基于.NET Framework,而非.NET Core):

  1. 将服务端项目从.NET Core 2.0改为.NET Framework 4.5+的ASP.NET项目
  2. 安装NuGet包:Microsoft.AspNet.SignalR
  3. 调整服务端配置:
    • 在Global.asax中注册SignalR路由:
      protected void Application_Start()
      {
          RouteTable.Routes.MapHubs();
          // 其他MVC相关配置
      }
      
    • NotificationsHub类可以保留原有代码,无需修改
    • 控制器中调用客户端的代码需要调整为旧版SignalR的写法:
      // 注入IHubContext的方式略有不同,旧版用GlobalHost.ConnectionManager
      var hubContext = GlobalHost.ConnectionManager.GetHubContext<NotificationsHub>();
      hubContext.Clients.All.appointmentConfirmation(name, message);
      
  4. 你的现有.NET 3.5客户端代码可以直接复用,无需修改。

额外注意点

  • 如果你坚持使用Core服务端,千万不要用旧版SignalR客户端的HubConnection——两者的路由协议完全不同,旧客户端会发送/notificationshub/negotiate这类请求,而Core服务端根本没有这个接口,必然返回404。
  • 确保服务端的UseSignalR配置在UseMvc之后(你现有代码已经做到了,这点没问题)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:06:30