【问题标题】:Reconnect hub necessary需要重新连接集线器
【发布时间】:2012-12-20 08:58:38
【问题描述】:

我在带有信号器的 ASP.NET 网站上有一个简单的项目。 启动连接集线器的代码:

var scriptStarted = 'var myHub = $.connection.' + hubName + ';' + methodNameInitHub + '(myHub);';
$.connection.hub.error(function () {
    alert("An error occured");
});

$.connection.hub.start()
                        .done(function () {
                            eval(scriptStarted);
                            myHub.server.registerClient($.connection.hub.id, clientIdentifier);
                        })
                        .fail(function () { alert("Could not Connect!"); });

这个方法在“methodNameInitHub + '(myHub);”中调用

function methodInitEventHub(hub) {
            if (hub) {
                hub.client.addEvent = function (eventOperationName, eventType) {
                    $("#events").append("<li>" + eventOperationName + ", " + eventType + "</li>");
                };
            }
        }

停止连接集线器的代码:

$.connection.hub.stop();

当我加载 .aspx 页面并启动集线器时,所有代码都可以正常执行,但未收到来自服务器的事件。 在我停止并重新开始后,客户端(浏览器)开始接收集线器连接事件 http://clip2net.com/s/2CP2e

为什么我需要重新启动连接集线器才能开始从服务器接收到事件? 谢谢。

【问题讨论】:

  • 在第一种情况下,启动集线器 url 是 /signalr/connect?transport=foreverFrame&connectionId=c874ed95-18f1-4eb1-b1b9-77c2c50c1d18&connectionData=[]&tid=3&frameId=1 和第二种情况 /signalr/connect?transport =foreverFrame&connectionId=687838d5-c747-40f0-aaf0-2ab47423f0ff&connectionData=[{"name":"eventhub"}]&tid=5&frameId=2 参数connectionData和frameId的区别

标签: javascript signalr


【解决方案1】:

您遇到问题的原因是因为在调用 start 之前您必须拥有至少 1 个客户端集线器功能,否则您将不会订阅集线器。

试试看

myHub.client.foo = function() {}

在开始之前。

它在您停止然后重新启动连接后起作用的原因是因为您的脚本绑定了一个新的客户端方法,因此允许您在重新启动连接后订阅集线器。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2016-08-20
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多