SignalR“ WebSocket握手时出错”

问题描述 投票:1回答:1

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

这是一个使用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负载平衡之后,因此协商请求被路由到可能导致此问题的其他服务器上?

感谢您的帮助。

asp.net-core signalr asp.net-core-signalr
1个回答
2
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.