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

跨域连接SignalR Hub出现“未订阅任何Hub”错误,求技术协助

解决SignalR跨域连接成功但提示"No hubs have been subscribed to"的问题

我一眼就看出问题所在了——你的跨域客户端代码没有订阅任何Hub的客户端回调方法。SignalR的机制是:只有当客户端明确注册了至少一个Hub的客户端方法(也就是hub.client.xxx形式的定义),服务器才会认定你已经订阅了该Hub,否则就会输出你看到的那条日志。

对比你提供的同域客户端代码,那边明确定义了hub.client.broadcastMessage方法,而跨域客户端里完全没有这部分逻辑,这就是核心差异。

修正后的跨域客户端代码

<script src="~/scripts/jquery-1.6.4.min.js"></script>
<script src="~/scripts/jquery.signalR-2.2.2.min.js"></script>
<!-- 注意:跨域场景下,必须从服务端完整URL加载hubs代理脚本,相对路径会失效 -->
<script src="http://localhost:2372/signalr/hubs"></script>
<script>
$(function () {
    // 获取ChattingHub的代理对象
    var hub = $.connection.chattingHub;

    // 关键步骤:注册至少一个客户端回调方法,这是订阅Hub的必要条件
    hub.client.broadcastMessage = function (name, message) {
        // 这里可以根据业务需求处理收到的消息,比如打印到控制台或渲染到页面
        console.log(`收到服务端推送:${name} 说:${message}`);
    };

    // 配置跨域SignalR服务地址
    $.connection.hub.url = 'http://localhost:2372/signalr';
    $.connection.hub.logging = true;

    // 启动连接
    $.connection.hub.start().done(function () {
        console.log("跨域连接成功,已成功订阅ChattingHub");
        // 如果需要,这里可以调用服务端Hub的方法,比如发送初始化消息
        // hub.server.sendMessage("跨域客户端", "我已上线");
    }).fail(function (error) {
        console.error("连接启动失败:", error);
    });
});
</script>

关键修改点说明

  1. 添加客户端方法注册:新增的hub.client.broadcastMessage方法告诉SignalR,客户端需要接收该Hub的推送消息,服务器会据此完成Hub的订阅流程,不再提示未订阅。
  2. 修正hubs脚本路径:跨域场景下,相对路径../signalr/hubs无法正确加载服务端生成的代理脚本,必须使用服务端的完整URL加载。
  3. 增加连接失败处理:补充fail回调方便排查后续可能出现的连接问题。

服务端跨域配置确认(额外提醒)

虽然你说已经启用跨域,但还是建议确认服务端的Cors配置是否正确(以Owin为例),确保在MapSignalR之前启用Cors:

using Microsoft.Owin.Cors;
using Owin;

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // 必须在MapSignalR之前启用Cors
        app.UseCors(CorsOptions.AllowAll);
        
        // 配置SignalR路由
        app.MapSignalR();
    }
}

这样修改后,你的跨域客户端就能正常订阅Hub,不会再出现那条日志错误了。

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

相关产品推荐
方舟 Agent Plan

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

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