Al usar Azure SignalR (no .Net Core SignalR), ¿se admite Clients.Users.SendAsync para enviar mensajes a un usuario específico?
[Authorize] public class ChatHub : Hub { public async Task OnNewMessage(string userId, string message) { await Clients.Users(userId) //Does Azure SignalR supports sending message to specific user, // the way .Net Core SignalR does it .SendAsync("OnNewMessage", userId, message); } }En caso afirmativo, ¿cómo se pasa el principal de reclamos de identidad de Asp.Net a Azure SignalR?
Edición: 18 de junio de 2021
Las respuestas a continuación no abordan las preocupaciones. Lo siento, pero ya había seguido la documentación para personalizar UserIdBasedProvider , etc. Quiero enfatizar que:
Esta pregunta se refiere a cómo SignalR maneja
.Users(<*some-user-id*>).Send();
Idealmente hacemos .Client(<connection id>).Send() para enviar un mensaje a un usuario específico. Pero para esta arquitectura debemos almacenar el ID de usuario y el ID de conexión en la base de datos, etc.
.User(userId).Send() funciona perfectamente con .Net Core SignalR. Así que creo que SignalR SDK debe haber estado manteniendo el mapa de cada Id. de conexión e Id. de usuario en la memoria.
¿Azure SignalR realiza un seguimiento interno del ID de usuario, la asignación del ID de conexión y envía el mensaje?
Puede lograr esto implementando su IUserIdProvider personalizado de esta manera y registrándolo como un singleton.
public class UserIdProvider : IUserIdProvider { public string GetUserId(HubConnectionContext connection) { return connection.User.FindFirst(ClaimConstants.PreferredUserName).Value; } }Referencia relacionada y Github