tutorial net hubconnection example asp signalr

net - SignalR-Establecer ClientID manualmente



signalr tutorial (3)

En SignalR versión 1 utilizando el enfoque de Hubs, anulo el método Hub OnConnected () y guardo una asociación de un ID de usuario de membresía .NET con el ID de conexión actual (Context.ConnectionId) en una base de datos SQL.

Luego, anulo el método Hub OnDisconnected () y elimino la asociación entre el ID de usuario de la membresía .NET y el ID de conexión actual. Esto significa que en una recarga de la página se actualizará la asociación userId / connectionId.

Algo a lo largo de las líneas de:

public class MyHub : Hub { private MembershipUser _user { get { return Membership.GetUser(); } } private Guid _userId { get { return (Guid) _user.ProviderUserKey; } } private Guid _connectionId { get { return Guid.Parse(Context.ConnectionId); } } public override Task OnConnected() { var userConnectionRepository = new UserConnectionRepository(); userConnectionRepository.Create(_userId, _connectionId); userConnectionRepository.Submit(); return base.OnConnected(); } public override Task OnDisconnected() { var userConnectionRepository = new UserConnectionRepository(); userConnectionRepository.Delete(_userId, _connectionId); userConnectionRepository.Submit(); return base.OnDisconnected(); } }

Luego, cuando necesito activar un evento SignalR para un usuario específico, puedo calcular el ConnectionId de la (s) asociación (s) de la base de datos con el userId actual: puede haber más de una asociación si hay varias instancias del navegador involucradas.

Quiero poder hacer que los usuarios individuales se envíen mensajes entre sí utilizando SignalR, por lo tanto, debo enviarlos a una ID de cliente específica. ¿Cómo puedo definir el ID de cliente para un usuario específico al inicio de la sesión? ¿Cómo decir una clave primaria GUID para el usuario?


La documentación del lado del cliente de SignalR describe lo siguiente:

connection.id - Obtiene o establece el ID de cliente para la conexión actual

Esto ciertamente indica que uno debe poder configurar el lado del cliente de ClientID, sin todas las tuberías anteriores. ¿Esto no está funcionando? Si funciona, ¿cómo sería esta línea de código?