【发布时间】:2018-01-25 15:02:24
【问题描述】:
我正在使用 signalR 2.2.1。 当 IIS 应用程序池回收时,如果有打开的连接,客户端会永远尝试重新连接(使用相同的 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();
});
但是我正在处理重新连接,我想这不是一个好主意。
还有其他想法吗?
【问题讨论】:
-
您的网站是否经过身份验证?如果是这样,您可能需要固定您的机器密钥
-
@thab 它是 Web 应用程序(子级)下 WCF 服务(IIS Web 应用程序)的一部分,Web 应用程序经过身份验证并具有有效的机器密钥,服务不是,但它获得来自父母的认证。这也能提出这个问题吗?
-
那么你有一个固定的机器密钥,是吗? (ASP.NET 的默认设置是在每次重新启动应用程序时重新生成一个新的)。所有身份验证都将被丢弃,因为 cookie 是使用现在无效的机器密钥签名的。
-
是的,我做到了。它仍然会发生。
-
回收后需要重新登录吗?基本上这应该可以正常工作...您是否覆盖集线器的服务器端 onReconnect?
标签: javascript c# signalr signalr-hub signalr.client