【问题标题】:Keeping connection alive in the right way from c# client从 c# 客户端以正确的方式保持连接
【发布时间】:2015-09-28 12:26:06
【问题描述】:

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

  • Web 应用程序:我可以使用 disconnected 事件保持连接状态,如下所示:

    $(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 服务中,我如何处理我在 Web 应用中使用的断开连接事件(2 秒后重新启动连接行为)?

提前致谢,

【问题讨论】:

  • asp.net/signalr/overview/guide-to-the-api/… 您的问题中已经提到了这个逻辑。您要解决的问题是什么?
  • 是的,我知道我的集线器的 Web 应用程序客户端中有这种逻辑。我的中心的 Windows 服务客户端需要相同的逻辑。
  • 答案——不可能。
  • 是的。请看我的回答。

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


【解决方案1】:

这是我需要的:

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;
            }
        };

【讨论】:

  • 你不需要在那里尝试一下吗?
【解决方案2】:

在磁盘客户端断开连接时执行自定义逻辑是覆盖集线器类上的 ondisconnected 方法,如下所示:

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

【讨论】:

  • 是的,但我希望我的客户端在断开连接时自行重新连接到集线器。我认为这不是我的问题的答案。
  • 在客户端发出任何请求之前,服务器无法连接到客户端,因为客户端已断开连接。 hub 类可以为您提供的所有功能就是让您有机会知道某些客户端已断开连接。
  • 是的,我需要我的客户端连接到服务器。如何在 Windows 服务中做到这一点?
  • 当客户端断开连接时,意味着服务器无法访问它。因此您无法使用服务器代码将客户端连接到服务器。 O.O
  • @Artiom 不,问题中提到的 C# 代码是客户端。如果您阅读代码,您将看到这一点。无论如何感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2016-10-28
  • 2019-11-05
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 2021-05-26
  • 2020-10-20
  • 1970-01-01
相关资源
最近更新 更多