IIS AppPool回收后,信号器将永远重新连接

我正在使用signalR 2.2.1 . 当IIS apppool循环使用时,如果存在打开的连接,则客户端会尝试永远重新连接(使用相同的ConnectionId) .

SignalR客户端日志的示例(针对每次重新连接尝试):

SignalR:webSockets重新连接 . SignalR:连接到的WebSocket endpoints “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();
    });

但是我正在处理重新连接,我猜这不是一个好主意 .

还有其他想法吗?

回答(1)

2 years ago

在上述评论中进行了一系列诊断尝试后:

尝试在Hub中注释掉 OnReconnect 方法 . 作为一般规则,我不建议覆盖 onReconnect - 您需要它的原因很少,我能想到的唯一一个可能是重新连接的服务器端日志记录 .

在Signalr连接的生命周期中,重新连接通常在SignalR恢复而没有任何消息丢失时发生 - 在这种情况下,您实际上不需要做任何事情 . 还有一些其他情况可能会发生重新连接,你需要某种恢复,但它们主要是我不推荐的SignalR架构(两个节点共享相同的URL和机器密钥,但在不同的背板上) .