2015-09-28 47 views
0

我有一个自己托管的信号中心和两种类型的客户端连接到它。保持连接活着以正确的方式从c#客户端

  • Web应用程序:我可以保持连接状态,当你看到下面使用断开事件:

    $(function() { 
        $.connection.hub.url = "http://localhost:8080/signalr"; 
    
        // Declare a proxy to reference the hub. 
        var priceHub = $.connection.uTHub; 
    
        $.connection.hub.start(); 
    
        $.connection.hub.disconnected(function() { 
         setTimeout(function() { 
          $.connection.hub.start(); 
         }, 2000); // Restart connection after 2 seconds. 
        }); 
    }); 
    
  • 的Windows服务:

    hubConnection = new HubConnection("http://localhost:8080/signalr", "source=" + feed, useDefaultUrl: false); 
        priceProxy = hubConnection.CreateHubProxy("UTHub"); 
        hubConnection.Start().Wait(); 
    

在windows服务,如何我可以处理断开的事件(2秒后重新启动连接行为),正如我在Web应用程序中使用的那样?

由于提前,

+0

http://www.asp.net/signalr/overview/guide-to-the-api/handling-connection-lifetime-events#keepalive这个逻辑已经在你的问题中提及过了。你试图解决什么? – Artiom

+0

是的我知道我在我的集​​线器的Web应用程序客户端中拥有该逻辑。我需要与我的集线器的Windows服务客户端相同的逻辑。 – anilca

+0

答案 - 这是不可能的。 – Artiom

回答

4

这就是我需要:

http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-net-client#connectionlifetime

 hubConnection.Closed +=() => { 
      connected = false; 
      while (!connected) 
      { 
       System.Threading.Thread.Sleep(2000); 
       hubConnection = new HubConnection("http://localhost:8080/signalr", "source=" + feed, useDefaultUrl: false); 
       priceProxy = hubConnection.CreateHubProxy("UTHub"); 
       hubConnection.Start().Wait(); 
       connected = true; 
      } 
     }; 
+1

你不需要在那里尝试一下吗? –

0

执行自定义逻辑,当盘客户端断开连接是覆盖在轮毂类ondisconnected方法,像这样:

public override Task OnDisconnected(bool stopCalled) 
    { 
     // your custom code here... 
     return base.OnDisconnected(stopCalled); 
    } 
+0

是的,但我希望我的客户端在断开连接时自行重新连接到集线器。我认为这不是我的问题的答案。 – anilca

+0

在客户端发出任何请求并且客户端断开连接之前,服务器无法连接到客户端。所有的枢纽班可以为你提供的是给一个机会来了解一些客户已断开连接。 – SHM

+0

是的,我需要我的客户端连接到服务器。我如何在Windows服务中做到这一点? – anilca