【问题标题】:SignalR hub repeated connection POST requestsSignalR 集线器重复连接 POST 请求
【发布时间】:2022-01-06 10:36:44
【问题描述】:

我有一个使用 SignalR 的 asp.net core 3.1 Web 应用程序,我遇到了来自我的 Web 客户端的奇怪重复请求,例如:

我不知道为什么会发生这些,AFAIK 客户端上没有任何代码会导致这种情况。我也问过我的用户,他们也没有报告任何奇怪的事情(例如浏览器自动刷新)。我希望有人看到过类似的事件或知道什么是最好的调试方法。

更新 1:

我尝试了强制长轮询策略,无法在本地重现问题。

我添加了一些额外的日志变量,显然主体是空的,但所有奇怪的请求都来自在 Linux 上运行的 Chrome。我想是时候启动一个虚拟机了……

【问题讨论】:

    标签: asp.net-core signalr asp.net-core-signalr


    【解决方案1】:

    您的客户端是否可能没有可用的 Web 套接字或服务器发送事件协议,并且正在使用长轮询回退,并执行此功能?

    https://github.com/dotnet/aspnetcore/blob/9f96be478cc3b6f459899d795e9f8b7dadb20018/src/SignalR/clients/ts/signalr/src/Utils.ts#L93

    大概如果你会临时做更详细的日志看看发送了哪些Json属性名,你可以看看是不是类似于hub方法调用消息的东西。或者您也可以尝试记录用户代理标头以检查请求客户端的浏览器是否支持这些协议

    更新:

    或者您可以使用这样的代码测试本地轮询传输请求的时间长度

    var connection = new signalR.HubConnectionBuilder()
    .withUrl("/chatHub", signalR.HttpTransportType.LongPolling).build();
    

    这是它在我本地的样子,输入:6 是 ping 请求,正如 Brennan 提到的那样

    调用如下所示:

    【讨论】:

    • 正如我在上面的“更新 1”中添加的,所有奇怪的请求都来自 Linux 用户的 Chrome。是否有可能由于某种原因在 linux websockets 上被禁用?
    • @TamásDeme 抱歉,我给了你错误的 ASP.NET Core 3.1 代码示例,如果你使用它,这可能是你本地不一样的原因,更新了答案,对不起控制台中的俄语。当您尝试时,如果缓存突发关闭,请确保禁用缓存,我在测试该代码时忘记了它:) 奇怪的是没有内容,要找出我们可能需要的浏览器中是否有 Web Sockets浏览器版本号,你保存了吗?
    【解决方案2】:

    客户端定期发送 ping。但是,在使用 LongPolling 时不需要这样做,并且已在 5.0.0 中修复。

    https://github.com/dotnet/aspnetcore/pull/15352

    【讨论】:

      【解决方案3】:

      我发现了问题(或者至少是这个问题):

      如果你不在 web 应用配置中启用 websockets,你显然不会有 websockets...?‍♂️

      我将留下问题/答案,以防万一有人遇到同样的问题。我想这是最接近的:

      • 是否已插入?

      • 当然是。

      • [旁白]它没有插入。

      感谢大家提供有用的指点! @Andy 也可能会检查您的配置:)

      【讨论】:

      • 真糟糕——我的没关。附带说明一下,确保 AAR Affinity 也已打开
      猜你喜欢
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 2017-03-11
      • 1970-01-01
      相关资源
      最近更新 更多