我遇到了同样的问题,并检查了线鲨鱼,但没有从我的集线器到我的客户端的传出流量。 通信的另一种方式是正确流动!
到目前为止,我还没有能够建立一个解决方案,但会让你张贴,只是想分享我的发现。
添加了对集线器和客户端的跟踪,并注意到集线器关闭了连接,但客户端没有。 从HUB日志文件:
SignalR.Transports.TransportHeartBeat Verbose: 0 : d1992c3d-fbec-43e6-9662-b3e94af39418 is dead
SignalR.Transports.TransportHeartBeat Information: 0 : Removing connection d1992c3d-fbec-43e6-9662-b3e94af39418
而且在测井它保持使用相同的连接
02:34:36.3191340 - d1992c3d-fbec-43e6-9662-b3e94af39418 - OnMessage({"I":"232"})
哈弗曾经有以下类型的常规消息,这不再是在客户端上发送。
02:34:35.2053710 - d1992c3d-fbec-43e6-9662-b3e94af39418 - LP: OnMessage({"C":"d-7D145E50-B,18|N,5|O,1","M":[]})
02:34:35.2073150 - d1992c3d-fbec-43e6-9662-b3e94af39418 - LP Poll: http://172.16.2.101:8074/signalr/poll?clientProtocol=1.4&transport=longPolling&connectionData= ...
从当前页Signal R on the wire 我了解到,{ “I”: “232”}消息意味着:服务器空隙方法已成功完成。
这是正确的,因为我可以在集线器中处理更新。但是当我在同一个连接ID上调用一个方法时,什么也没有发生。这并不奇怪,因为中心认为这种联系已经死了!
那么,为什么传出消息的集线器上的连接死了,但集线器仍然能够处理来自该连接的消息传递?
其他调查结果:Here中提到,“客户端保持活动检查未用于长轮询运输”,我发现了一个参考here这的确是禁用默认并在此问题上的最后一个注释是“......停止接收通信从服务器来了...”
如果我理解正确的话,我们使客户保持活动设置:GlobalHost.Configuration.KeepAlive
现在我们提出这一点,所以仍然为什么客户端无法检测到连接死!
您是否看到正在创建的新连接?因为听起来客户端正在使用传入流量的新服务,但Invoke仍在使用旧的连接。 –
客户端仍在使用旧连接,在Hub中有一个OnDisconnected,但从来没有新的OnConnected或OnReconnected。不过,我发现中心枢纽回答与“我”的消息,但认为连接已经死亡,这很奇怪。刚刚发现这似乎是相同的,但在里程碑2.1.2中关闭,我们正在使用版本2.2:[问题3259](https://github.com/SignalR/SignalR/issues/3259)重新连接过程从未触发在客户端,它停止接收来自服务器的任何通信 – Boscabouter