从c#客户端以正确的方式保持连接活动

时间:2015-09-28 12:26:07

标签: c# signalr signalr-hub signalr.client

我有一个自托管信号器集线器和两种连接到它的客户端。

  • 网络应用:我可以使用断开连接的事件保持连接状态,如下所示:

    $(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秒后重新启动连接行为),就像我在网络应用中使用的那样?

提前致谢,

2 个答案:

答案 0 :(得分: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);
    }