我有以下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');
})
当我在SayHello()
上致电TestHub
时,客户打印出以下完美信息
sayHelloFired
当代理首次加载时,它会将以下内容完美地打印到控制台。
Connected
但是,如果我在OnConnected()
上的TestHub
方法中抛出一个断点,那么它就不会命中。
所有讨论类似问题的帖子都表明他们没有在客户端订阅处理程序,但事实并非如此。这怎么可行?OnConnected()
永远不会被解雇?
答案 0 :(得分:0)
由于
,您的代码没有为我编译Context.Clients.All.sayHello();
线。这里的上下文试图引用Hub.Context
这是一个HubCallerContext
类。我想你想引用Hub.Clients
IHubCallerConnectionContext
。
我将该行替换为
Clients.All.sayHello();
我的断点被调用了。 但是我很惊讶你让它运行并在控制台上收到消息。
BTW你是对的,当使用javascript客户端时,如果没有订阅集线器中的任何事件,则不会调用OnConnected methond。 但这不是这种情况。