C# 即使SignalR SelfHost服务器上的连接未关闭,OnDisconnected事件是否可能被触发?

C# 即使SignalR SelfHost服务器上的连接未关闭,OnDisconnected事件是否可能被触发?,c#,signalr,self-hosting,C#,Signalr,Self Hosting,我们创建了一个自主机signar服务器,我们的WPF桌面应用程序正在连接到该服务器。我们只是做登录注销管理,一切都很简单和工作。但过了一段时间,通常是2-3小时,一半的客户会从在线客户列表中消失 服务器上的连接似乎会触发,OnDisconnected事件,即使这些连接尚未关闭。在发生断开连接事件后,这些连接仍可发送和接收数据 当连接未关闭时,是否有任何情况会导致服务器上触发断开连接的事件 是否存在导致在上触发OnDisconnected事件的场景 连接未关闭时的服务器 对。如果连接超时,则首先断

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

服务器上的连接似乎会触发,
OnDisconnected
事件,即使这些连接尚未关闭。在发生断开连接事件后,这些连接仍可发送和接收数据

当连接未关闭时,是否有任何情况会导致服务器上触发断开连接的事件

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

对。如果连接超时,则首先断开连接,然后重新连接(如果客户端未明确关闭连接)

正如你在这里看到的。如果发生显式断开连接(
stopCalled
为true),则客户端肯定会断开连接,并且不会发生重新连接

若客户机确实并没有断开连接,那个么断开连接后的重新连接可能会发生在您的研究中


查看更多详细信息

谢谢您的回答,我们没有对重新连接的事件进行任何控制,我想这就是问题所在。请检查重新连接时连接Id的唯一性(如果您保留它们)。如果发生重新连接而未断开连接,则可能会有重复记录。检查这里
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();
}