网站重新启动时自动恢复/重新连接SignalR连接

时间:2014-10-11 19:49:50

标签: asp.net signalr

我有一个用ASP.net编写的网站,它使用SignalR。

每当我发布对Web服务器的更改时,任何打开的SignalR连接都会在没有警告的情况下断开连接,因此用户看来它只是已冻结。当然,如果他们刷新了页面,连接已恢复,可以继续。

有没有办法优雅地重新打开那些丢失的连接,而无需用户以任何方式采取行动?

1 个答案:

答案 0 :(得分:5)

如果您的网站/ appdomain在30秒内重启(SignalR的默认DisconnectTimeout),SignalR应尝试自动无缝地重新建立连接。

当SignalR客户端发现服务器已关闭并开始尝试重新连接时,它将触发重新连接事件。如果在DisconnectTimeout之前成功重新连接,它将触发重新连接的事件。

在服务器上,将在Hub或PersistentConnection上调用OnReconnected事件,客户端将成功自动重新连接。此事件将在更新的Web应用程序中调用。

如果您发现客户端正在断开连接,这可能意味着他们在DisconnectTimeout到期之前无法重新连接。您可以展开DisconnectTimeout,也可以在客户端断开连接后尝试手动启动新连接。如果您手动启动新连接,将在服务器上调用OnConnected而不是OnReconnected,并且将为客户端提供新的ConnectionId。

有关SignalR重新连接逻辑的更多详细信息以及如何在SignalR客户端上手动重新启动连接可以在this guide for "Understanding and Handling Connection Lifetime Events in SignalR"