如何在循环SignalR集线器时关闭连接

时间:2014-10-02 10:51:16

标签: iis signalr

我有一个SignalR HUB,它维护各种连接客户端的内存存储库,其中包含一些我们用来处理请求的数据。理想情况下,这些客户将始终保持联系。

我遇到的问题是当我们需要将补丁推送到集线器时,我们发布它并回收服务器。这种情况很快发生,客户端仍然保持连接,但由于网站已被回收,因此集线器使用的内存已被清除,存储库不再存在。

也许这对我来说是一个设计缺陷,但有没有办法在循环服务器时强制连接丢失,或者我应该使用除了简单的内存单例之外的东西来存储我的存储库?或者我是否完全误解了这里发生的事情?

2 个答案:

答案 0 :(得分:1)

您可以使用类似于此处发布的内容:OnDisconnect and Logged on Users after recycle?

我有同样的问题,我做的是:

1 - 让所有客户注册“ForceRestart”'功能:

_proxy.On("ForceRestart", () => _hub.Stop());

2 - 所以在服务器构造函数中,当连接的客户端数量(我在内存中跟踪)为零时,表示服务器已被回收,或者服务器是全新的,所以我打电话:

IHubContext _hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
_hubContext.Clients.All.ForceRestart();

这样我就可以清理所有剩余的虚拟连接。我希望这会有所帮助。

答案 1 :(得分:-1)

信号器文档中有很多好的信息。检查&#34; 服务器断开连接方案&#34; this

的一部分