即使在SignalR SelfHost服务器上没有关闭连接,是否可能会触发OnDisconnected事件?

时间:2016-04-06 10:27:30

标签: c# signalr self-hosting

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

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

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

1 个答案:

答案 0 :(得分: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