【问题标题】:SignalR OnConnected and OnDisconnected not firingSignalR OnConnected 和 OnDisconnected 未触发
【发布时间】:2012-12-10 10:33:43
【问题描述】:

我的 Hub 中的 OnConnected 和 OnDisconnected 覆盖无法触发。

出于复制目的,我有一个非常简单的 Hub:

public class OnlineHub : Hub
{
    public void TestMethod()
    {
        var a = 1;
    }

    public override System.Threading.Tasks.Task OnConnected()
    {
        return Clients.All.connected(Context.ConnectionId, DateTime.Now.ToString());
    }

    public override System.Threading.Tasks.Task OnDisconnected()
    {
        return Clients.All.disconnected(Context.ConnectionId, DateTime.Now.ToString());
    }
}

还有一个aspx页面:

<script type="text/javascript">
    $(function () {
        $("#btn").click(function () {
            $.connection.onlineHub.server.testMethod();
        });

        $.connection.onlineHub.server.connected = function (id, date) {
            $("#results").append("connected: " + id + " : " + date + "</br>");
        };

        $.connection.onlineHub.server.disconnected = function (id, date) {
            $("#results").append(("connected: " + id + " : " + date + "</br>");
        };

        $.connection.onlineHub.connection.start();
    });

</script>

我正在使用 jQuery 1.6.4 和 signalR 1.0.0-alpha2。未执行客户端连接和断开连接的方法。如果我在 OnConnected 或 OnDisconnected 中设置断点,断点不会命中。

当我的 TestMethod 调用正常时正在建立连接,并且我从 signalR 的协商调用中得到了一个 connectionId。

我确定我错过了一些简单的东西。

提前致谢。

【问题讨论】:

    标签: asp.net signalr


    【解决方案1】:

    您的客户端处理程序应该如下所示:

    $.connection.onlineHub.client.connected = function(){...}
    

    【讨论】:

    【解决方案2】:

    事实证明,在脚本中,您需要为要在集线器上引发的事件定义至少一个客户端回调。在预期调用 OnConnected 和 OnDisconnected 时要小心。

    【讨论】:

    • 还要注意,客户端回调方法是在调用 $.connection.hub.start() 之前定义的
    【解决方案3】:

    想通了。我在服务器对象而不是客户端上调用方法:

    $.connection.onlineHub.server.connected = function (id, date) {
            $("#results").append("connected: " + id + " : " + date + "</br>");
        };
    
        $.connection.onlineHub.server.disconnected = function (id, date) {
            $("#results").append(("connected: " + id + " : " + date + "</br>");
        };
    

    应该是

    $.connection.onlineHub.client.connected = function (id, date) {
            $("#results").append("connected: " + id + " : " + date + "</br>");
        };
    
        $.connection.onlineHub.client.disconnected = function (id, date) {
            $("#results").append(("connected: " + id + " : " + date + "</br>");
        };
    

    所以看起来如果 signalR 没有为 OnDisconnected 或 OnConnected 中的任务定义任何内容,那么它们不会被解雇。这是有道理的。

    【讨论】:

    • 您应该将@Duncan 的回答标记为好,因为他是对的!
    • 正确答案是@Duncan's,因为他半小时前就发布了!
    • 是的,感谢@Matei_Radu 如此迅速地回答了一个 3 岁以上的问题。如果没有你,这个网站会在哪里!?
    • 我只是认为他的回答应该被相应地标记,如果我以任何方式让你不高兴这不是我的意图,但仍然......:)
    • 有相应的标记。自 2013 年 1 月以来一直如此。
    【解决方案4】:

    我错过了这段代码。放回去后,开始工作

    $.connection.hub.start().done(function () {               
        //chat.server.sendMessageToBackend($('#displayname').val(), $('#message').val());                 
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多