Signalr 已连接的信号器未命中,但仍然能够从服务器调用客户端函数
我有以下TestHub,它只调用客户端sayHello函数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();
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方法。
但事实并非如此