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

JQuery SignalR正常运行但长轮询每2秒循环,未收到定时推送怎么办?

问题根因及修复方案

  1. Hub上下文获取参数不匹配
    你在LogHub类上标记了[HubName("logHub")]自定义Hub名称,但获取Hub上下文时传入的字符串为"LogHub",大小写不匹配导致无法拿到正确的上下文,消息无法推送给客户端。
    推荐直接使用泛型重载获取上下文,避免手写名称出错,修改TimerElapsed方法如下:
private static void TimerElapsed(object sender, ElapsedEventArgs e)
{
    // 泛型重载无需手动指定Hub名称,避免拼写/大小写错误
    var hubContext = GlobalHost.ConnectionManager.GetHubContext<LogHub>();
    hubContext.Clients.All.logMessage(string.Format("{0} - Still running", DateTime.UtcNow));
}
  1. 检查基础配置是否遗漏
  • 确认你的项目中存在Owin Startup类,且在Configuration方法中已注册SignalR路由:
public void Configuration(IAppBuilder app)
{
    app.MapSignalR();
    // 其他配置
}
  • 确认前端脚本引用顺序正确:先引入jQuery,再引入jquery.signalR.js,最后引入SignalR自动生成的代理脚本/signalr/hubs,顺序错误会导致Hub代理无法正常初始化。
  1. 补充连接状态回调排查问题
    你可以在前端启动SignalR的代码中增加连接成功/失败的回调,确认连接是否正常建立,同时你写了两层document ready嵌套属于冗余代码,可以简化:
$(function () {
    var logHubProxy = $.connection.logHub;

    logHubProxy.client.logMessage = function (msg) {
        $("#logUl").append("<li>" + msg + "</li>");
    };

    $.connection.hub.logging = true;

    $.connection.hub.start({ transport: 'longPolling' })
        .done(function () {
            console.log("SignalR连接成功");
        })
        .fail(function (err) {
            console.log("连接失败,错误信息:", err);
        });
});
  1. 长轮询2秒循环说明
    如果连接未成功建立,SignalR会按默认重试策略不断发起连接请求,就会出现每2秒一次的长轮询请求,修复上述问题连接成功后即可恢复正常的消息推送逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:24:03