2014-10-02 88 views
1

我有一个SignalR HUB,用于维护各种连接客户端的内存存储库,其中包含一些用于处理请求的数据。理想情况下,这些客户将始终保持联系。如何在循环SignalR集线器时关闭连接

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

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

回答

1

可以使用类似的东西是什么张贴在这里:OnDisconnect and Logged on Users after recycle?

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

1,使所有客户注册“ForceRestart”功能:

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

2-所以在服务器的构造中,当(I在存储器跟踪)连接的客户端的数量是零,则表示服务器已被回收或服务器是全新的,所以我呼吁:

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

这样,我清理所有剩余的虚拟连接。我希望这有帮助。

+0

这与我的想法是一致的,只是不确定是否有更好的方法。感谢您的输入! – amnesia 2014-11-10 13:47:04

-1

在signalr文档中有很多很好的信息。检查“服务器断开连接的情况”的一部分this

+0

我已经详细研究了这个页面,我们确实有处理所有断开连接的情况,但是这并没有解决我的文章中的特定问题。 – amnesia 2014-10-04 13:13:41