hub上的stop方法不会触发onDisconnect

时间:2014-03-19 20:52:35

标签: c# jquery signalr

当用户从我的Web应用程序注销时,我明确地使用以下代码

结束其集线器的连接
$.connection.hub.stop();

在服务器端,我希望我的Hub类的实现会立即触及我对OnDisconnected()方法的重写,但事实并非如此。该方法最终被调用,但仅在达到断开超时时才会被调用。我应该怎么做才能立即通知服务器端我的客户端集线器上是否已调用stop方法?

3 个答案:

答案 0 :(得分:0)

您所描述的情景应该有效。 如果我是你,我会检查你的覆盖是否正确完成加上我在客户端调用.stop()时检查我是否有连接。

你可能想要做这样的事情来获得一些额外的信息:

$.connection.hub.stop()
.done(function(){ console.log('done'); })
.fail(function(){ console.log('Could not stop!'); });

});

SignalR docs about connections management

答案 1 :(得分:0)

我挣扎了几个小时。我正在使用SignalR 2

在基本脚本上,您需要为集线器上引发的事件定义至少一个客户端回调.....我最终在running an example from here.

时发现了这一点
chat = $.connection.chatHub;

// Need at least one callback for events to be raised on the hub
chat.client.void = function () { };

$.connection.hub.logging = true;
$.connection.hub.start(); //.done(function () {

现在,经过挖掘,我的断点终于会在OWIN C#服务器上受到攻击。

public override Task OnConnected()
{
   //logic code removed for brevity
   return base.OnConnected();
}

public override Task OnDisconnected(bool stopCalled)
{ 
   //logic code removed for brevity
   return base.OnDisconnected(stopCalled);
}

答案 2 :(得分:0)

ppumkin,谢谢你的回答! 我遇到了同样的问题,唯一的区别是我们不会为我们的集线器使用autoproxies。 因此,如果您自己在js中创建集线器代理并期望集线器上的OnDisconnected事件没有回调绑定 - 请添加虚假事件订阅,如此代码示例中所示:

    export default class MyHubProxy{
        constructor(connection){
            this._myHub = connection.createHubProxy('MyHub');
            this._myHub.on('fake_event', function(){});
        }
    ...
    }