我使用signalR 2.2.1。 当IIS apppool循环使用时,如果有一个打开的连接,客户端会尝试永远重新连接(使用相同的ConnectionId)。
SignalR客户端日志的示例(每次重新连接尝试):
SignalR:webSockets重新连接。
SignalR:连接到websocket端点 ' WSS:// IP /集线器/ signalr /重新连接运输=的WebSockets&安培; groupsToken = 8FWHT%2FO774vZYA7IYz8%2F%2FX9zMLswzG98KhGbM83kK5xh%2BVVbqQPv1wQYQWvzTygSQHj9QsDyoHL1U8eQ1fV18QQQ%2FZqRewQEpU4rkRZRE0CE%2B2oDk9RQghCT%2BxlV0KFcl%2FUpuepwX0E5w4xhSScH%2BFkxFvL4vtPIpwYVzInIaW%2BICRWRHrNfjKm9RLiC3a%2F3jcYi1AUeFBJsDnY%2F9bZBrA%3D% 3D&安培; MESSAGEID = d-C69C65D6-H%2C0%7CI%2C0%7CJ%2C4%7CK%2C0%7CL%2C0%7CM%2C0&安培; clientProtocol = 1.5&安培; connectionToken =%2FivgB%2Bcy%2FE1%2B%2BTFj5eCqTEZNzr% 2FVuIzdJQVbUypK1YjrZur80uPbufYxGT%2BDC%2FWhsHXZJgUpkI2IyJ8Y8wnuOEAID%2F9kOnSyllFpCQHDN6VRTdMEaU%2F0Kdh4yX2vqKh%2F&安培; connectionData =%5B%7B%22name%22%3A%22hub%22%7D%5D&安培; TID = 0'
SignalR:关闭Websocket。
SignalR:Websocket打开了。
SignalR:不干净地从websocket断开:[没有给出理由]。
我做了一个解决方法 - 当正在调用重新连接的回调时 - 停止并启动连接(刚刚开始赢得工作):
$.connection.hub.reconnected(function() {
console.log("reconnected");
$.connection.hub.stop();
$.connection.hub.start();
});

但是我正在处理重新联系,我想这不是一个好主意。
还有其他想法吗?
答案 0 :(得分:2)
在上述评论中进行了一系列诊断尝试后:
尝试在Hub中注释掉OnReconnect
方法。作为一般规则,我不建议覆盖onReconnect
- 您需要它的原因很少,我能想到的唯一一个可能是重新连接的服务器端日志记录。
在Signalr连接的生命周期中,重新连接通常在SignalR恢复而没有任何消息丢失时发生 - 在这种情况下,您实际上并不需要做任何事情。在某些其他情况下可能会发生重新连接,您需要进行某种恢复,但它们主要是SignalR架构,我不推荐(两个节点共享相同的URL和机器密钥,但在不同的背板上) )。