You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure SignalR Service用户无活跃连接问题排查求助

解决方案

1. 调整服务注册顺序

你的代码中AddAzureSignalR的注册在自定义IUserIdProvider之前,这会导致Azure SignalR Service使用默认的用户ID提供者,而非你自定义的实现。必须先注册IUserIdProvider,再配置Azure SignalR:

// 先注册自定义用户ID提供者
services.AddSingleton<IUserIdProvider, UserIdProvider>();

// 再配置SignalR和Azure SignalR
services.AddSignalR()
        .AddAzureSignalR(signalRConnString);

2. 确保认证中间件优先于SignalR中间件

在Program.cs(或Startup.cs)中,认证授权中间件必须放在SignalR中间件之前,这样在连接协商阶段,服务器就能正确解析用户的CLAIM1和CLAIM2 Claims:

// 先启用认证授权
app.UseAuthentication();
app.UseAuthorization();

// 再映射SignalR Hub
app.MapHub<YourHub>("/hub-path");

3. 验证连接时的用户ID正确性

在Hub的OnConnectedAsync方法中,手动获取并打印用户ID,确认自定义提供者生成的ID是否正确:

public override async Task OnConnectedAsync()
{
    var userId = Context.UserIdentifier;
    Console.WriteLine($"Connected user ID: {userId}");
    await base.OnConnectedAsync();
}

同时对比Azure实时跟踪中的用户ID,确保两者一致。

4. 检查客户端认证信息传递

确保客户端在建立SignalR连接时,正确传递了包含CLAIM1和CLAIM2的认证凭证(比如JWT token)。以JavaScript客户端为例:

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chatHub", {
        accessTokenFactory: () => "your-jwt-token-with-claims"
    })
    .build();

完成以上配置后,Azure SignalR Service就能正确关联你的自定义用户ID与连接,消息推送即可恢复正常。


内容的提问来源于stack exchange,提问作者hbulens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:22:47