hub上的stop方法不会触发onDisconnect

本文关键字:onDisconnect 上的 stop 方法 hub | 更新日期: 2023-09-27 17:50:57

当用户从我的web应用程序注销时,我用以下代码显式地结束其集线器的连接

$.connection.hub.stop();

在服务器端,我希望Hub类的实现能够立即覆盖OnDisconnected()方法,但事实并非如此。该方法仅在达到断开连接超时时才被调用。我应该怎么做才能立即通知服务器端停止方法在我的客户机的集线器上被调用?

hub上的stop方法不会触发onDisconnect

我为此挣扎了几个小时。我正在使用signalr2

在基本脚本中,您需要为中心.....上引发的事件定义至少一个客户端回调我最终在这里运行一个例子时发现了这个问题。

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);
}

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

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

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

});

关于连接管理的SignalR文档

ppumkin,谢谢你的回答!我也遇到过同样的问题,唯一的区别是我们的集线器不使用自动代理。所以,如果你自己在js中创建hub代理,并期望在hub 上发生OnDisconnected事件,而不绑定回调,那么就像下面的代码样例一样添加假事件订阅:

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