9

我的集线器中的 OnConnected 和 OnDisconnected 覆盖无法触发时遇到问题。

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

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。

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

提前致谢。

4

4 回答 4

14

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

$.connection.onlineHub.client.connected = function(){...}
于 2012-12-10T11:30:21.960 回答
7

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

于 2015-09-01T06:05:12.373 回答
2

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

$.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 中的任务定义任何内容,那么它们就不会被解雇。这是有道理的。

于 2012-12-10T12:09:36.400 回答
0

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

$.connection.hub.start().done(function () {               
    //chat.server.sendMessageToBackend($('#displayname').val(), $('#message').val());                 
});
于 2021-12-30T10:09:33.470 回答