Signalr 已连接的信号器未命中,但仍然能够从服务器调用客户端函数

Signalr 已连接的信号器未命中,但仍然能够从服务器调用客户端函数,signalr,signalr-hub,signalr.client,Signalr,Signalr Hub,Signalr.client,我有以下TestHub,它只调用客户端sayHello函数 public class TestHub:Hub { public void SayHello() { Context.Clients.All.sayHello(); } public override Task OnConnected() { //do some custom stuff return base.OnConnected();

我有以下TestHub,它只调用客户端sayHello函数

public class TestHub:Hub
{
    public void SayHello()
    {
      Context.Clients.All.sayHello();
    }

    public override Task OnConnected()
    {
        //do some custom stuff 
        return base.OnConnected();
    }
}
关于客户,我有以下几点:

var connection = $.hubConnection('http://localhost:12345/signalr');

var proxy = connection.createHubProxy('TestHub');

proxy.on('sayHello',function(){
     console.log('sayHello fired');
})

connection.start().done(function(){
       console.debug('Connected');
})
当我在TestHub上打电话给SayHello时,客户机会很好地打印出以下内容

sayHelloFired
当代理首次加载时,它会将以下内容完美地打印到控制台

Connected
但是,如果我在TestHub上的OnConnected方法中抛出一个断点,那么它不会命中


所有讨论类似问题的帖子都表明,客户端没有订阅处理程序,但这里的情况并非如此。这怎么可能起作用,而OnConnected从未被激发?

您的代码没有为我编译,因为

Context.Clients.All.sayHello();
线路。此处的上下文尝试引用HubCallerContext类。我想您需要引用的是IHubCallerConnectionContext

我把那句话换成了

Clients.All.sayHello();
我的断点被调用了。 然而,我很惊讶你们让它运行并在控制台上得到消息

顺便说一句,在使用javascript客户端时,如果集线器中没有订阅任何事件,则不会调用OnConnected方法。 但事实并非如此