SignalR连接错误

时间:2014-01-23 12:56:34

标签: signalr signalr-hub signalr.client

我使用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);

1 个答案:

答案 0 :(得分:0)

您未保留第一个连接参考。

Aka你创建一个HubConnection,然后永远不会在以后可以使用的范围内捕获它;因此,当您稍后断开连接时,connection.stop什么也不做,因为它没有在最初启动的HubConnection上调用停止。

这最终可能会导致您有太多同时打开的请求,这些请求将不允许您与服务器协商,从而导致您的错误。

我建议您修复停止/启动连接的方式。接下来如果问题仍然存在,我会检查网络流量以确保有效请求。