重新连接的客户端SignalR没有收到消息 - javascript

我在作为服务运行的服务器上运行了SignalR Hub。由于任何原因,此服务器可能会因断电,正在更新(我们使用八达通自动更新)或其他原因而停止运行。

如果我有一个用户连接到此服务,则将消息发送到服务器,然后将消息转发到传感器。然后,传感器将消息返回到服务器,然后转发到客户端Webapp。

这在第一个连接上工作正常。如果服务在重新连接超时之前停止并重新启动,则我将获得具有相同连接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
    }

参考方案

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

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

Mongo汇总 - javascript

我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …

JavaScript中的字符串评估函数 - javascript

            JavaScript中是否有任何内置函数,例如Python中的eval内置函数?注意:eval函数将方程式作为字符串并返回结果。例如,假设变量x为2,则eval("2x+5")返回9。 参考方案 是的,JavaScript中也有eval函数。此外,该声明应有效用于评估,即eval("2*x+5"…

如何在JQuery中操作JSONArray - javascript

我有一个php函数,它以JSON返回此代码{"0":{"title":"Dans l\u2019appartement"},"1":{"title":"A l\u2019a\u00e9roport - D\u00e9part de B\u00e9at…

在两个值之间匹配并返回正则表达式 - javascript

我正在尝试使用正则表达式从字符串中获取值,该值是tt="和"&之间的文本的值因此,例如,"tt="Value"&"我只想从中得到单词"Value"。到目前为止,我已经有了:/tt=.*&/这给了我"tt=Value"&,然后,要…

获取JavaScript值到C#字符串 - javascript

                        是否可以在C#中执行类似的操作?该值为“ 10/05/2014”string jsValue = javascript("$('#EstimatedStartDate').val()"); 参考方案 您能否更详细地阐明您要做什么。看来您正在尝试从javascript(客户…