我使用SignalR 2.0.0 Win2012 iis8和两个不同的ips环境。 一个环境服务正在运行,第二个正在关闭(故意) 使用websocket协议。
我有以下情况: 当我连接到第一个环境并想要连接到第二个。 我从第一个环境断开连接并尝试连接到第二个环境我得到错误(其正确的行为) 我尝试重新连接到第一个环境,但我仍然遇到同样的错误。
错误是“协商请求期间出错”。 刷新浏览器后,我可以再次成功连接到第一个环境。
我做错了什么?
这是我的代码的一部分:
function connect(host)
{
var hubConnection = $.hubConnection.('');
hubConnection.url = host;
hubConnection.start()
.done(open)
.fail(error);
}
function open()
{
console.log('login success')
}
function disconnect()
{
var self = this,
hubConnection = $.hubConnection("");
console.log('disconnect ')
hubConnection.stop(true, true);
}
function error(error)
{
var self = this,
hubConnection = $.hubConnection("");
console.log('connection error ')
if(error && hubConnection.state !== $.connection.connectionState.connected)
{
.....
.....
//logic detemninate wich environment ip was previous
connect(environment ip)
}
}
//occured when button disconnect clicked
function disconnectFromFirstEnvironmentAndConnectToSecond()
{
disconect();
connect(second environment ip);
}
.....
.....
connect(first environment ip);
答案 0 :(得分:0)
您未保留第一个连接参考。
Aka你创建一个HubConnection
,然后永远不会在以后可以使用的范围内捕获它;因此,当您稍后断开连接时,connection.stop什么也不做,因为它没有在最初启动的HubConnection
上调用停止。
这最终可能会导致您有太多同时打开的请求,这些请求将不允许您与服务器协商,从而导致您的错误。
我建议您修复停止/启动连接的方式。接下来如果问题仍然存在,我会检查网络流量以确保有效请求。