未调用SignalR客户端集线器上的ON事件 [英] The On event on the SignalR Client Hub does not get called

查看:18
本文介绍了未调用SignalR客户端集线器上的ON事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我似乎对SignalR的JS客户端集线器有问题。

问题是‘on’处理程序似乎不工作-它不会生成错误,但不会接收服务器发送的任何信号。 下面的代码显示了一段摘录,其中我调用了服务器(使用Invoke),运行良好-然后在服务器上回调到ceptHubData,该数据应该在客户机上拾取,但没有拾取。

我的目标是在导航到页面时,每个页面都会打开一个到特定中心的连接,并在用户移动到另一个页面时释放此连接!!

编辑:使用以下代码片段可以工作,但我想知道为什么下面使用"on"事件的代码不能工作!

    var superHub = $.connection.mySuperHub;

    superHub.client.acceptHubData = function (data) {
        $('<li>hello there' + data + '</li>').prependTo($('#ul1'))
    }

    $.connection.hub.start().done(function () {
        $('<li>done phase 1</li>').prependTo($('#ul1'))
    });

如有任何帮助,我们将不胜感激!

这是客户端代码(js格式)

$(document).ready(function () {

    var myHub;

    try {

        var connection = $.hubConnection();

        connection.start().done(function () {

            myHub = connection.createHubProxy("mySuperHub");

            myHub.on('acceptHubData', function (data) {
                alert(data);   // THIS IS NOT CALLED!
            });

            myHub.invoke('AcceptSignal', "hello from the client2");

        });

    }
    catch (e) {
        alert(e.message);
    }
});

这是服务器代码:

[HubName("mySuperHub")]
public class MyHub : Hub
{

    private readonly HubEngine _hubEngine;

    public MyHub() : this(HubEngine.Instance) { }

    public MyHub(HubEngine hubEngine)
    {
        _hubEngine = hubEngine;
    }

    public void AcceptSignal(string msg)
    {
        Clients.Caller.acceptHubData("hi");
        Clients.All.acceptHubData("hi");
    }

}

推荐答案

在最新版本的SignalR中,您仍然可以使用on方法为JS客户端HUB方法调用添加事件,但是如果您在调用hubConnection.start()之前没有向hubProxy添加任何事件监听器,您将无法订阅该HUB。当hubConnection启动时,SignalR订阅您拥有的事件处理程序的集线器。如果您未订阅集线器,则在start()之后向该集线器添加任何事件都不起作用。

如果您在start()之前向集线器添加了至少一个事件侦听器,则即使它不执行任何操作,您也可以在start()之后使用on向集线器添加所需的任何其他事件处理程序,您的处理程序将被调用。

在调用start()之前使用hubProxy.on('eventName', function (...autogeneratedHubProxy.client.eventName = function (...添加事件没有关系,但只有on在调用start()之后才能成功添加事件监听器。

这篇关于未调用SignalR客户端集线器上的ON事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆