我们创建了一个自托管SignalR
服务器,我们的WPF桌面应用程序正在连接到该服务器。我们只是在进行登录注销管理,一切都很简单而且有效。但过了一段时间,通常是2-3个小时,一半的客户正在从在线客户列表中消失。
看来,OnDisconnected
事件在服务器上触发连接,即使它们没有关闭。在OnDisconnected
事件发生后,这些连接仍然可以发送和接收数据。
是否有任何情况导致在连接未关闭时在服务器上触发OnDisconnected
事件?
答案 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