使用SignalR Hubs,连接会在一段时间后丢失 – 为什么?

在我的SignalR应用程序中,回调在页面上按预期触发。 如果页面停留一段时间,则在刷新之前不再在该页面上调用回调。

我怀疑这可能是由于网站的会话到期(使用客户端的会话ID来调用客户端通知)。

我在这里阅读了关于KeepAlivefunction的信息,并且可以在SignalR代码中看到它的一些引用。 我不清楚是否需要实施客户端keep-alive,如果需要,如何实现?

我没有做过任何实验或检查文档,但你的假设是有道理的。 由于各种原因,SignalR不支持会话。 如果它不支持从会话中读取,那么期望它不会刷新会话到期时间是合理的。 但是,如果您确实需要使用会话ID作为客户端ID(您不应该这样做),那么实现一种保持活动很容易。 只需编写一些JS即可以最简单的方式调用服务器(例如,启用了Session的HTTP处理程序),而无需做任何工作。 它仅用于刷新会话到期时间。

看看http://www.asp.net/signalr/overview/signalr-20/hubs-api/handling-connection-lifetime-events

  $.connection.hub.disconnected(function() { alert('disconnected') setTimeout(function() { alert('reconnecting') $.connection.hub.start(); }, 5000); // Restart connection after 5 seconds. });