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
相关产品推荐
相关产品推荐

