【发布时间】:2014-04-18 18:09:02
【问题描述】:
我注意到 SignalR 在某些情况下无法识别传输层的断开连接事件。如果传输正常断开连接,无论是通过断开与服务器的 VPN 连接,还是发出 ipconfig /release 都会触发相应的事件。如果我连接到 VPN 并且我拔掉网络电缆或关闭无线,SignalR 不会识别我们已断开连接,直到 VPN 连接超时。这在很大程度上是可以接受的,因为它最终会意识到这一点。但是,如果我没有使用 VPN 并且我只是拔下网络电缆或关闭无线,SignalR 永远不会识别出发生了断开连接。这是在非 CORS 环境中使用 SignalR 2.0.1 over WebSockets。如果我在集线器中启用日志记录,我会在等待超过 5 分钟后看到控制台中没有记录任何事件。我在启动期间在日志中看到的一件令我困扰的事情是:
SignalR: Now monitoring keep alive with a warning timeout of 1600000 and a connection lost timeout of 2400000.
这是我的问题吗?我尝试手动将 GlobalHost.Configuration.DisconnectTimeout 设置为 30 秒,但它不会改变这种情况下的任何行为,也不会改变该日志语句。我还可以在这里忽略什么?
编辑:我在提琴手中注意到我的协商响应有 3600 的断开超时和 2400 的保活,并且 trywebsockets 是错误的。这个特定的服务器是 2008 R2,我不相信它支持 Web Sockets。这是否意味着将使用长轮询?我在提琴手或控制台中看不到任何长轮询请求。
【问题讨论】:
-
Windows Server 2008 不支持 WebSockets。这并不意味着使用长轮询,因为它将首先尝试另外两种传输方式:服务器发送事件和永久帧(仅限 IE)。请参阅asp.net/signalr/overview/signalr-20/… 了解更多信息。
标签: signalr