我在C#客户端上使用最新的SignalR版本2.3.0。 我面临的问题是在stackoverflow上提到的here。但是这个问题已经有好几年了,并且已经在github上关闭了。
我面临的问题是,每当客户端到服务器的请求超时时,客户端就会开始重新连接到服务器,然后继续重新连接。我也尝试在连接中定义WebSocket协议,但结果仍然相同。
_connection.Start(new Transports.WebSocketTransport()).Wait(TimeSpan.FromSeconds(10));
我正在寻找服务器与客户端之间的持久连接。
我在StateChanged事件上添加了一个事件处理程序,以捕获SignalR客户端的状态变化。
这是重新连接状态的屏幕截图
有人知道为什么会发生这种情况以及如何预防吗?
答案 0 :(得分:1)
原因可能是因为您的OnReconnect
甚至没有被触发,然后当客户调用here所述的stop方法时,您的OnDisconnected
也没有被触发:>
如果客户端进入重新连接模式但无法建立 在断开连接超时限制内传输传输连接,服务器 终止SignalR连接。发生这种情况时,服务器 执行集线器的OnDisconnected方法并排队断开连接 客户端成功连接时发送给客户端的消息 后来。如果客户端随后确实重新连接,它将收到断开连接 命令并调用Stop方法。在这种情况下,OnReconnected是 客户端重新连接时未执行,并且OnDisconnected未执行 客户端调用Stop时执行。
这是指SignalR版本2,但我相信它也会对您有所帮助。
还值得一提的是,如果您从start
事件(或JavaScript中的closed
)调用disconnect
,您将有争议地尝试重新连接说:
在某些应用程序中,您可能需要自动重新建立 连接丢失后尝试重新连接 时间到。为此,您可以从Closed调用Start方法 事件处理程序(JavaScript客户端上断开连接的事件处理程序)。您 可能需要等待一段时间才能致电“开始”,以便 避免在服务器或物理服务器上过于频繁地执行此操作 连接不可用。以下代码示例适用于 使用生成的代理的JavaScript客户端。
无论如何,直到版本2断开客户端与服务器的连接的最简单方法是在客户端上实现disconnect
方法,并如上所述从服务器调用它:
SignalR版本2没有用于的内置服务器API 断开客户端连接。有计划添加此功能 在将来。在当前的SignalR版本中,最简单的方法是 断开客户端与服务器的连接是为了实现断开连接 客户端上的方法,然后从服务器上调用该方法。