【问题标题】:Client side SignalR on reconnect doesn't receive messages重新连接时的客户端 SignalR 未收到消息
【发布时间】:2016-04-29 03:50:24
【问题描述】:

我在作为服务运行的服务器上运行 SignalR Hub。该服务器无论出于何种原因,都可能由于断电、正在更新(我们使用八达通自动更新)或其他原因而停止。

如果我有一个连接到此服务的用户向服务器发送消息,然后又将此消息转发到传感器。然后传感器向服务器返回一条消息,并转发到客户端 web 应用程序。

这在第一次连接时工作正常。如果服务在重新连接超时之前停止并重新启动,我会使用相同的连接 ID 重新连接,并且可以发送消息。但是,我不能接收消息。

如果我刷新页面,我会得到它们,因为这会创建一个新的连接。无论是OnConnect() 还是OnReconnect(),都会调用相同的代码。

示例

public override Task OnConnected()
    {
        EstablishConnection("Connect");
        return base.OnConnected();
    }

    public override Task OnReconnected()
    {
        // Remove old Connection Id to receive messages on reconnect
        ConnectionsHandler.Instance.RemoveTerminalClient(Context.ConnectionId);

        EstablishConnection("Reconnect");

        // This block is to tell the user that connection has been reconnected. This message shows on the webapp so connection has been restored.
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<TerminalHub>();
        var message = TerminalMessageColorer.ColorMessageLime(String.Format("Connection has been re-established!"));
        hubContext.Clients.Client(Context.ConnectionId).TerminalEcho(message);

        return base.OnReconnected();
    }

    private void EstablishConnection(string conType)
    {
        ConnectionsHandler.Instance.AddTerminalClient(Context.ConnectionId, "null");
        var terminal = ConnectionsHandler.Instance.GetTerminalClient(Context.ConnectionId);
#if DEBUG
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine("{0}\t{1}\t...{2}", terminal, Context.ConnectionId, conType);
#endif
    }

【问题讨论】:

    标签: javascript c# angularjs signalr


    【解决方案1】:

    我发现了问题所在。我需要在客户端代码中包装$timeout,因为 C# 代码中似乎有一点延迟。调试初始化程序后,我从 chrome 开发工具中偶然发现了这一点,认为用户 id 没有被传递一定是错误的。一旦我在调用初始化时添加了一个断点,它就会去那里以便工作,但从那里继续我会在之后收到消息。没有断点我不会。所以我在电话周围添加了$timeout

    $timeout(function () {
        initializeTerminal();
    }, 100);
    

    【讨论】:

      【解决方案2】:

      不工作 - 由于 jquery 版本

      <script src="~/Scripts/jquery-3.6.0/jquery-3.6.0.min.js"></script>
      <script src="~/Scripts/signalr/jquery.signalR-2.4.2.js"></script>
      <script src="~/signalr/hubs"></script>
      <script src="~/Areas/Noc/NocDOCSIS/Scripts/script.noc.light.js"></script>
      

      工作 - 由于 Jquery 版本

      <script src="~/Scripts/jquery-2.2.4/jquery-2.2.4.min.js"></script>
      <script src="~/Scripts/signalr/jquery.signalR-2.4.2.js"></script>
      <script src="~/signalr/hubs"></script>
      <script src="~/Areas/Noc/NocDOCSIS/Scripts/script.noc.light.js"></script>
      

      【讨论】:

        猜你喜欢
        • 2017-05-26
        • 2013-05-21
        • 2020-08-13
        • 2020-10-15
        • 1970-01-01
        • 2016-08-25
        • 1970-01-01
        • 2015-01-17
        • 1970-01-01
        相关资源
        最近更新 更多