在请求超时后,SignalR客户端保持重新连接

时间:2018-08-17 14:02:37

标签: c# signalr

我在C#客户端上使用最新的SignalR版本2.3.0。 我面临的问题是在stackoverflow上提到的here。但是这个问题已经有好几年了,并且已经在github上关闭了。

我面临的问题是,每当客户端到服务器的请求超时时,客户端就会开始重新连接到服务器,然后继续重新连接。我也尝试在连接中定义WebSocket协议,但结果仍然相同。

 _connection.Start(new Transports.WebSocketTransport()).Wait(TimeSpan.FromSeconds(10));

我正在寻找服务器与客户端之间的持久连接。

我在StateChanged事件上添加了一个事件处理程序,以捕获SignalR客户端的状态变化。

这是重新连接状态的屏幕截图

enter image description here

有人知道为什么会发生这种情况以及如何预防吗?

1 个答案:

答案 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版本中,最简单的方法是   断开客户端与服务器的连接是为了实现断开连接   客户端上的方法,然后从服务器上调用该方法。