Signalr 信号机不';t使用';在';启动与服务器的连接后订阅

Signalr 信号机不';t使用';在';启动与服务器的连接后订阅,signalr,Signalr,我让SignalR与Angular客户端一起工作,但是如果在订阅事件之前建立了连接,我就无法让proxy.on()工作 我的服务器方法在两个集线器上调用客户机方法pushToClient var connection1 = $.hubConnection(); //Works fine since I started connection AFTER subscribing var proxy1 = connection1.createHubProxy('clientPushHub'); pro

我让SignalR与Angular客户端一起工作,但是如果在订阅事件之前建立了连接,我就无法让
proxy.on()
工作

我的服务器方法在两个集线器上调用客户机方法
pushToClient

var connection1 = $.hubConnection(); //Works fine since I started connection AFTER subscribing
var proxy1 = connection1.createHubProxy('clientPushHub');
proxy1.on('sendToClient', function (message) {
    console.log('This will work: ' + message);
});
connection.start();

var connection2 = $.hubConnection(); // Doesn't work when I start the connection BEFORE subscribing
var proxy2 = connection2.createHubProxy('clientPushHub');
connection2.start();
proxy2.on('sendToClient', function (message) {
    console.log('This will not work: ' + message);
});
如果我更改了内容,以便在启动
connection2
之前订阅pushToClient,那么它可以正常工作。还尝试在start().done()回调中执行“on”订阅,但无效

我下载并验证了连接后订阅时预期的作品,并特别提到,如果不使用生成的代理,您可以按此顺序执行操作,我没有这样做

对提问者有用的东西对我不起作用

你知道我哪里出了问题吗?

基于此,在调用start之前,你至少需要有一个事件侦听器。从那里,您可以使用“on”功能添加更多事件处理程序

编辑:

试试这个

proxy2.on('foo',function(){});
connection2.start();
proxy2.on('sendToClient', function (message) {
    console.log('This will not work: ' + message);
});
此外,这是您在博文中的文章:


注意:通常在调用start方法建立连接之前注册事件处理程序。如果要在建立连接后注册某些事件处理程序,可以这样做,但必须在调用startmethod之前注册至少一个事件处理程序。这样做的一个原因是,一个应用程序中可能有许多集线器,但如果您只想使用其中一个集线器,则不希望在每个集线器上触发OnConnect事件。当建立连接时,集线器代理上的客户端方法的存在会告诉SignalR触发OnConnected事件。如果在调用start方法之前未注册任何事件处理程序,则可以调用Hub上的方法,但不会调用Hub的sOnConnected方法,也不会从服务器调用任何客户端方法。

对我也适用。另外,感谢您指出文章中的片段。我错过它的原因是我在看关于注册侦听器的部分,它说你可以在开始后注册。我没有想到要通过建立一个连接来回过头来看一个便条,这是我前一段时间做的。