SignalR 集线器重复连接 POST 请求

SignalR hub repeated connection POST requests

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

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

更新 1:

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

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

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

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

可能如果你暂时做更详细的日志来查看发送了哪些Json 属性 名称,你可以看看它是否类似于hub 方法调用消息。或者您也可以尝试登录 user-agent header 以检查请求客户端的浏览器是否支持这些协议

更新:

或者您可以使用类似这样的代码来测试轮询传输请求在您本地的显示时间有多长

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

这是我本地的样子,类型:6 是 ping 请求,正如 Brennan 提到的

调用如下所示:

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

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

我解决了问题(或至少解决了这个问题):

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

我把问题/答案留了下来,以防万一有人遇到同样的问题。我想这已经很接近了:

  • is it plugged in?

  • of course it is.

  • [narrator] it wasn't plugged in.

谢谢大家的指点!另外@Andy 也可能检查你的配置:)