Silverlight SignalR 客户端需要更长的时间来停止自托管 SignalR 上的连接

Silverlight SignalR Client takes longer to stop Connection on Self Hosted SignalR

我正在使用 SignalR 自托管服务 (V 2.2.0) 作为服务器并使用 Silverlight 作为 SignalR 客户端。

我能够连接到服务器并能够交换消息。我有一个按钮可以停止与 SignalR 服务的连接。

我想要的是,当我单击此按钮时,该客户端的连接应该与 SignalR Hub 断开连接。我能够与 SignalR Hub 断开连接,但它需要很长时间才能响应,我的客户端(Silverlight Web 应用程序)进入无响应状态并在大约 28-30 秒后恢复。单击按钮后,有什么方法可以立即断开客户端连接吗?

这是因为死锁。 SignalR 客户端在发送中止请求时阻塞线程。但是 Silverlight 想要在 UI 线程上发送请求。停止连接的默认超时为 30 秒,因此在超时后线程将被解除阻塞并继续执行。这可以通过异步调用停止 (await Task.Factory.StartNew(() => hubConnection.Stop());) 或缩短超时来解决。

TL;DR;

https://github.com/SignalR/SignalR/issues/3102

我通过在 Silverlight 线程任务中调用集线器断开连接方法解决了我的问题。所以现在我不用担心集线器与 SignalR 断开连接的确认。