$ .connection.hub.id在done函数中未定义

时间:2014-06-18 13:02:13

标签: javascript asp.net-mvc-3 signalr

我们正在使用SignalR 1.2.1。这是我的开始功能:

$.connection.hub.start(self._SignalROptions)
            .done(function () {
                self._connecting = false;
                log("Connected to dashboard hub successfully. (id=" + $.connection.hub.id + ")");
                self._ensureExistingClientFunctionsAreRegistered();
                if (aDoneFunction) {
                    aDoneFunction();
                }
            })
            .fail(function () {
                log("Connection to dashboard hub failed!");
            });

偶尔(似乎是时间问题)我们得到一个控制台日志:

成功连接到仪表板中心。 (ID =未定义)

然后,在集线器上调用的任何未来函数都会抛出异常

"必须先启动连接才能发送数据。在.send()"

之前调用.start()

David Fowl在下面的文章中说,$ connection.hub.id在done函数中无法定义,但它确实发生了:https://github.com/SignalR/SignalR/issues/557

我做错了什么?如果在未来版本中修复此问题,我们很快就会升级,但有人可以为此提供证据吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

确保在客户端上至少配置了一个集线器方法。接下来尝试删除你的self._SignalROptions以确保这里没有东西并允许它使用默认传输等。我会删除你的done方法中除了log语句之外的所有代码,我将切换到警告以排除任何解析问题。

启用日志记录并查看控制台以确保不会出现错误。

$.connection.hub.logging = true

最后,在服务器上放置一个断点,看看OnConnected方法是否在集线器中被点击。如果您仍然没有获得连接ID,我会在GitHub上为SignalR团队提出问题。

您应该获得一个ID,如果您已经删除了所有自定义代码,那么此处没有其他任何操作。您的服务器代码也有可能存在问题。