asp.net-core - 有时 SignalR "Error during WebSocket handshake"

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

在我的生产环境中,我的应用程序大约有一半的时间在接受握手时遇到问题。在我的本地计算机和与生产环境相同的临时环境中,它每次都有效。

这是一个使用 aspnet-signalr/1.1.4 的 .Net Core 2.1 应用程序

我没有将 SignalR 配置为在启动中使用任何具体信息

app.UseSignalR(routes => { routes.MapHub<PortfolioHub>("/loadpagedetailsjob"); });

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Dashboard}/{action=Index}/{id?}");
});

我的PortfolioHub只是Hub类的直接实现

在我的页面

var connection = new signalR.HubConnectionBuilder()
    .withUrl('/loadpagedetailsjob')
    .configureLogging(signalR.LogLevel.Information)
    .build();

connection.start().then(function () {
    connection.invoke("Subscribe");
});

enter image description here

看起来它尝试协商 Web 套接字,然后进行长轮询,但都失败了。但请求返回200

enter image description here

因为这种情况只是有时发生,所以我在解决问题时遇到了问题。此时我唯一的怀疑是,由于我的环境位于 AWS 中,负载平衡后,协商请求被路由到不同的服务器,这可能会导致问题?

感谢任何帮助。

最佳答案

SignalR 要求一个连接始终由同一台服务器处理。典型的解决方案是将负载均衡器配置为使用粘性 session 。启用粘性 session 后,负载均衡器会将同一用户的请求路由到同一后端服务器。

https://learn.microsoft.com/en-us/aspnet/core/signalr/scale?view=aspnetcore-3.1

关于asp.net-core - 有时 SignalR "Error during WebSocket handshake",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60601552/

相关文章:

asp.net-core - Web Api Core 中的社交身份验证

c# - .NET 可扩展的 Pub/Sub 服务实现

asp.net-mvc-4 - 调用客户端时,信号器服务器端方法是否应该异步?

asp.net-core - ASP.Net Core SignalR 不记名 token 协商

angular-cli - 为信号器设置代理后,Angular 5.1.1 无限刷新循环?

c# - 在 Web API 调用中检索 SignalR connectionId

c# - ASP.NET Core 网站在 30 分钟后超时

asp.net-core - 返回 401 而不是重定向 identityserver

c# - 如何在.net Core 2.0中扩展SignInManager

javascript - SignalR 在更改页面后不更新 ng-view