SignalR OnConnected未命中但仍能从服务器

时间:2015-11-09 00:23:24

标签: 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();
    }
}

在客户端,我有以下内容:

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()永远不会被解雇?

1 个答案:

答案 0 :(得分:0)

由于

,您的代码没有为我编译
Context.Clients.All.sayHello();

线。这里的上下文试图引用Hub.Context这是一个HubCallerContext类。我想你想引用Hub.Clients IHubCallerConnectionContext

我将该行替换为

Clients.All.sayHello();

我的断点被调用了。 但是我很惊讶你让它运行并在控制台上收到消息。

BTW你是对的,当使用javascript客户端时,如果没有订阅集线器中的任何事件,则不会调用OnConnected methond。 但这不是这种情况。