【问题标题】:SignalR done event triggers too soonSignalR 完成事件触发太快
【发布时间】:2013-06-13 11:38:45
【问题描述】:

SignalR 在我的开发机器和我们的开发测试服务器上运行良好,但是当我将它部署到我们的验收测试机器(应该与开发测试机器相同的配置)时,我得到一个

未捕获的错误:SignalR:连接尚未完全初始化。 使用 .start().done() 或 .start().fail() 在 连接已开始。

我也跟踪到 signalR 在连接实际准备好使用之前过早调用 done 函数的问题

有人遇到过同样的问题吗?

完整的代码可以在这里找到 https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/blob/master/SignalR.EventAggregatorProxy.Client.JS/jquery.signalR.eventAggregator.js

相关代码,处理所有 SignalR 通信的类的构造函数

var Proxy = function (eventAggregator) {
    this.eventAggregator = eventAggregator;

    this.hub = $.connection.eventAggregatorProxyHub;
    this.hub.client.onEvent = this.onEvent.bind(this);
    this.queueSubscriptions = true;
    this.queuedSubscriptions = [];
    $.connection.hub.start().done(this.onStarted.bind(this));
};

我将所有调用排队,直到调用完成

onStarted: function () {
    this.queueSubscriptions = false;
    this.sendSubscribeQueue();
}

但是直接调用 Done(我认为它实际上与 start 函数同步调用),当发送第一条消息时,我得到上述消息

解决方案:

我发现了问题,我们使用的是MVC4捆绑,部署脚本在部署前没有清除目标区域。因此,scripts 文件夹中有多个版本的 signalR,并且捆绑框架会全部加载它们。 :D 修复部署脚本后,一切正常

【问题讨论】:

    标签: signalr


    【解决方案1】:

    此问题已在 SignalR 的下一个版本中修复。问题的原因是多次调用 start 导致延迟对象立即解决。

    我将如何解决您的问题(如果您不想等待下一个版本)将在您的代理对象中,我将更改连接开始行:

    $.connection.hub.stateChanged(function(state) {
        // Transitioning from connecting to connected
        if(state.oldState === $.signalR.connectionState.connecting && state.newState === $.signalR.connectionState.connected) {
            // Start sending
        }
    });
    
    $.connection.hub.start();
    

    通过这种方式,您可以保护您的库免受名为“starts”的用户的影响,并且只有在连接时才开始发送。

    【讨论】:

    • 奇怪的是我们只调用了一次start(上面的构造函数只调用了一次)
    • 嗯,我无法想象为什么它会这么早触发,但在下一个版本中有几个额外的修复程序来解决启动/停止问题,以确保它们是可靠的。您始终可以构建 SignalR 的 dev 分支,看看它是否解决了您的问题 :)
    • 我发现了问题,我们使用的是MVC4捆绑,部署脚本在部署前没有清除目标区域。因此,scripts 文件夹中有多个版本的 signalR,并且捆绑框架会全部加载它们。 :D 修复部署脚本后,一切正常
    猜你喜欢
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2021-12-31
    • 1970-01-01
    • 2020-09-12
    • 2012-09-24
    相关资源
    最近更新 更多