2016-03-18 54 views
1

我有一个调用信号R集线器方法的.net控制台应用程序。 我设法将连接配置为在发生多次故障后重新启动,并在超过重试次数后启动新的集线器实例。信号R集线器启动挂起

问题是有时候hub.start方法会挂起而没有任何异常,并且它没有进入延续。

下面是代码:

private static void restart() 
    { 
     Logging("Restarting connection", EventLogEntryType.Warning); 

     hubConnection.Start() // it stuck without any error after several retry 
      .ContinueWith((t) => 
     { 

      if (restartCount <= restartRetryCountMax) 
      { 
       if (t.IsFaulted) 
       { 
        restartCount++; 
        restart(); 
       } 
       else 
       { 
        CheckClientStatus(); 
       } 
      } 
      else 
      { 
       restartCount = 0; 
       Logging("Initialize new connection", EventLogEntryType.Information); 
       start();//start a fresh hub instance 
      } 
     }); 
    } 

这是一个错误? 我使用signalr版本2.2.0

+0

您在此显示的代码没有任何问题。你需要提供一个[MCVE](http://stackoverflow.com/help/mcve) –

+0

我只是想简化一下,基本上这个方法在连接断开时被调用。我不想在每次连接超时时创建新的集线器实例,因此请重新启动连接而不创建新的集线器实例。如果我放置了一个中断点,它将触发中心启动方法,然后它将毫无例外地释放它。这种方法随机卡住。 –

回答

0

当你调用start方法SignalR尝试当你的应用程序已经超过了它挂起,并且不能建立一个新的允许的连接的最大数目,以建立新的连接,但 。

有一个默认的并发连接数限制(我认为在默认情况下是2)

你可以改变它这种方式:

System.Net.ServicePointManager.DefaultConnectionLimit=x 

我会建议关闭退出事件集线器连接:

class Program 
    { 
     static void Main(string[] args) 
     { 
      AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit); 
     } 

     static void CurrentDomain_ProcessExit(object sender, EventArgs e) 
     { 
      /// stop hub connection 
      hubConnection.Stop(); 
     } 
    } 
+2

但为什么不进入延续? –