SignalR。无法访问OnConnected()

时间:2017-04-06 09:19:38

标签: javascript c# signalr-hub signalr.client

集线器代码

public class TestHub : Hub
    {
        public void Message(string message)
        {
                Clients.Group("testGroup").displayMessage(message);
        }
        public override Task OnConnected()
        {
            Groups.Add(Context.ConnectionId, "testGroup");
            return base.OnConnected();
        }
    }

生成代理的Javascript代码

var myHub = $.connection.testHub;
myHub.on('message', this.displayMessage);

$.connection.hub.start();



function displayMessage(message) {
 console.log(message);
}

如果我执行上述操作,似乎hub.start()正确运行并返回某种形式的对象。但是,当我在OnConnected内部使用断点进行调试时,我从未点击过。

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

基本上,您可以调用集线器方法,但如果您没有集线器上的订阅,OnConnect将无法工作。 这很奇怪,但这就是它的工作方式。

这样做:

var myHub = $.connection.testHub;

//add subscriptions
$.extend(myHub.client, {
    stupidLogicSignalR: function () {}
});

myHub.on('message', this.displayMessage);
$.connection.hub.start();

Here's一个类似的问题。 此issue也可以提供帮助

答案 1 :(得分:0)

使用订阅的其他语法

myHub.client.displayMessage = () => {console.log('message');};

答案 2 :(得分:0)

启用前端记录(在var myHub = $.connection.testHub;之后执行):

$.connection.hub.logging = true;

或通过以下方式将回调分配给.start:

$.connection.hub.start().done(function () {
console.log("connection started")
});