【问题标题】:Is it possible that OnDisconnected event will be fired even though connection is not closed on SignalR SelfHost server?即使 SignalR SelfHost 服务器上的连接未关闭,是否可能会触发 OnDisconnected 事件?
【发布时间】:2016-04-06 10:27:29
【问题描述】:

我们创建了一个自托管 SignalR 服务器,我们的 WPF 桌面应用程序正在连接到该服务器。我们只是在做登录-注销管理,一切都很简单而且有效。但过了一段时间,通常是 2-3 小时,一半的客户从在线客户列表中消失。

看起来,OnDisconnected 事件在服务器上触发了连接,即使它们没有关闭。在OnDisconnected事件之后,这些连接仍然可以发送和接收数据。

是否存在导致连接未关闭时在服务器上触发OnDisconnected 事件的情况?

【问题讨论】:

    标签: c# signalr self-hosting


    【解决方案1】:

    是否有任何场景导致 OnDisconnected 事件触发 连接未关闭时的服务器?

    是的。如果连接超时,首先断开连接然后重新连接(如果客户端没有明确关闭连接)。

    public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled)
    {
        if (stopCalled)
        {
            Console.WriteLine(String.Format("Client {0} explicitly closed the connection.", Context.ConnectionId));
        }
        else
        {
            Console.WriteLine(String.Format("Client {0} timed out .", Context.ConnectionId));
        }
    
        return base.OnDisconnected();
    }
    

    如您所见。如果显式断开连接(stopCalled 为真),客户端肯定断开连接,不会发生重新连接。

    如果客户端确实没有断开连接,则断开连接后可能会像您的情况一样发生重新连接。

    查看here了解更多详情

    【讨论】:

    • 感谢您的回答,我们没有对 OnReconnected 事件进行任何控制,我猜这就是问题所在。
    • 请在重新连接时检查连接 ID 的唯一性(如果您保留它们)。如果重新连接发生而没有发生断开连接,您可能会有重复的记录。在这里查看asp.net/signalr/overview/guide-to-the-api/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2018-10-07
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多