2017-08-17 357 views
1

我使用signalR 2.2.1之后。 当IIS应用程序池回收时,如果存在开放连接,则客户端将永久尝试重新连接(使用相同的ConnectionId)。Signalr坠崖永远IIS应用程序池回收

的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

您的网站经过认证?您可能需要定位您的计算机密钥如果是这样 – thab

+0

@thab它之下(的孩子)的Web应用程序是一个WCF服务(IIS Web应用程序)的一部分,Web应用程序进行身份验证并具有有效的机关键,服务是没有的,但它从父级获得认证。这是否也可以引起这个问题? – Programmer

+0

所以你有一个固定的机器钥匙,然后呢? (ASP.NET的默认设置是每次重新启动应用程序时重新生成一个新的)。所有的身份验证都将被抛出,因为cookie是使用现在无效的机器密钥签名的。 – thab

回答

1

在上述评论的一系列诊断尝试后:

尝试注释掉在轮毂上的OnReconnect方法。作为一般规则,我不建议覆盖onReconnect--为什么你需要它的原因很少,我唯一能想到的可能是服务器端重新连接的记录。

在Signalr连接的生命周期,重新连接通常发生在SignalR中恢复,而不信息的损失 - 在这种情况下,你实际上并不需要做任何事情。还有一些其他情况可能会发生重新连接,并且您需要某种恢复,但它们大部分是我不推荐的SignalR体系结构(两个节点共享相同的URL和机器密钥,但位于不同的背板上)。

相关问题