首页 > 解决方案 > 使用 SignalR 和 IdentityServer4 的 API 在 3 个以上的连接上挂起

问题描述

我的场景是我有一个实现 SignalR 和 IdentityServer4 的 API。我的客户是一个 .net-core 应用程序提供的 Vuejs SPA。在 vue 客户端启动后,access_token我启动了信号器连接并将其保存在vuexstore 中。

这就是我设置连接的方式:

var connection = new signalR.HubConnectionBuilder()
.withUrl(http://example.com + '/notifyHub',
    {
        accessTokenFactory: () => { return token }
    }
).build();

connection.start()
    .then(() => {
        window.console.log("signalR connection successful")
    })
    .catch(function (err) {
        return window.console.error(err.toString());
    });

这是我使用 IS4 身份验证的 SignalR 的 API 配置

services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(options =>
{
    options.Authority = $"{_config["Server"]}";
    options.RequireHttpsMetadata = _env.IsProduction() ? true : false;

    options.ApiName = "api";
    options.ApiSecret = "secret";

    options.TokenRetriever = new Func<HttpRequest, string>(req =>
    {
        var fromHeader = TokenRetrieval.FromAuthorizationHeader();
        var fromQuery = TokenRetrieval.FromQueryString();
        return fromHeader(req) ?? fromQuery(req);
    });
});

services.AddSignalR();
//sub claim is used from the token for individual users
services.AddSingleton<IUserIdProvider, UserProvider>();

及应用

app.UseWebSockets();

app.UseAuthentication();

app.UseSignalR(routes =>
{
    routes.MapHub<NotificationHub>("/notifyHub");
});

客户端始终建立成功的连接,并且所有实时通知都按预期工作。

现在为了测试功能,我启动了 2 个客户端,1 个来自 Chrome,1 个来自 Firefox,而这两个客户端已连接,一切正常。

一旦尝试连接第三个客户端(使用 Chrome Incognito 或 IE Edge),信号器连接成功,但所有 3 个客户端的 API 都挂起。如果我刷新任何客户端,其他 2 个将恢复工作,如果关闭其中一个客户端,其他两个将恢复正常工作。

客户端或 api 端的日志中没有有价值的信息来指示正在发生的事情。

我的问题是什么会导致这个问题,我该如何调查?

这是从同一主机启动多个客户端的问题吗?这是否会在生产中发生,它只会阻止单个主机启动客户端或所有主机?

编辑

我从 localhost 更改为本地 IP 192 .. .* 尝试从我的移动浏览器连接,看看是否有任何改变,同样的事情发生了,在第三个客户端连接后,API 挂起,如果我没有通过省略连接到 signalR 集线器,connection.start()我可以在不中断的情况下启动尽可能多的客户端.

我目前在本地 IIS 上托管,而不是 IIS express。

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

解决方案


推荐阅读