Quiero poder tener usuarios individuales que se envíen mensajes utilizando SignalR, por lo tanto, debo enviar un ID de cliente específico. ¿Cómo puedo definir la ID del cliente para un usuario específico al inicio de la sesión, por ejemplo, una clave principal GUID para el usuario?SignalR - Establecer ClientID manualmente
Respuesta
Reemplace el IConnectionIdFactory con su propio https://github.com/SignalR/SignalR/wiki/Extensibility.
uso de la muestra: http://www.kevgriffin.com/maintaining-signalr-connectionids-across-page-instances/
EDITAR: Esta ya no se admite en las últimas versiones de SignalR. Sin embargo, se puede definir un identificador de usuario para una conexión específica utilizando el nuevo IUserIdProvider
El SignalR Client Side documentation esboza lo siguiente:
connection.id - Obtiene o establece el ID de cliente para la conexión actual
Esto sin duda indica que uno debe ser capaz de establecer el lado del cliente clientID, sin todas las tuberías anteriores. ¿Esto no funciona? Si funciona, ¿cómo se vería esta línea de código?
No lo he intentado, pero necesito poder asignar la ID de conexión a algo conocido para el servidor, como un GUID (ID de usuario), por lo que la solución IConnectionFactory funciona mejor para mí. – reach4thelasers
+1 para subirlo aunque – reach4thelasers
En SignalR versión 1 utilizando el enfoque de Hubs, anulo el método Hub OnConnected() y guardo una asociación de .NET membership userId 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 membresía .NET y el ID de conexión actual. Esto significa que en una página volver a cargar la asociación userId/connectionId estará actualizada.
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();
}
}
Entonces cuando necesito para desencadenar un evento SignalR para un usuario específico, que puede resolver el ID de conexión de la asociación (s) base de datos con el ID de usuario actual - hay puede ser más de una asociación si hay varias instancias del navegador involucradas.
¿Tiene un ejemplo de esto? – CR41G14
He actualizado mi respuesta con un ejemplo –
- 1. Establecer ClientID en asp.net
- 2. SignalR OnConnected - Enviando Cliente Conectado un Mensaje
- 3. SignalR y unirse a grupos
- 4. SignalR - Cómo desactivo WebSockets
- 5. Get ID de conexión exterior de concentradores, SignalR
- 6. SignalR - StartUp
- 7. Require.js + SignalR
- 8. HTML Tag ClientID en un .NET Proyecto
- 9. Cómo establecer manualmente el valor inicial como 1000 en MySQL
- 10. ¿Es posible establecer una cookie manualmente usando sharedHTTPCookieStorage para UIWebView?
- 11. SignalR o NodeJS/Socket.IO?
- 12. SignalR across domains
- 13. signalR - getting username
- 14. SignalR y HttpContext/Session
- 15. SignalR y AspNetHost.DependencyResolver
- 16. SignalR wth compresión gzip
- 17. implementar signalR sin jquery
- 18. SignalR: desconexión del cliente
- 19. Protección de SignalR Calls
- 20. Unittest SignalR Hubs
- 21. SignalR en la web móvil?
- 22. SignalR: $ .connection no está definido
- 23. ¿Registro de excepción de SignalR?
- 24. SignalR $ .connection no está definido
- 25. Problemas con SignalR con NuGet
- 26. SignalR múltiples salas de chat
- 27. SignalR y balanceo de carga
- 28. obtener el clientid generado para un campo de formulario
- 29. ID vs UniqueID vs ClientID vs UniqueClientID versus StaticClientID?
- 30. Conseguir el clientId de un botón de XPages programación
Excelente - gracias por la respuesta y el enlace del blog! – reach4thelasers
¿Hay alguna manera de configurar manualmente la ID del cliente sin usar cookies? quizás un parámetro para el método de inicio() u otra forma de pasar información al objeto de solicitud en la fábrica de conexiones personalizadas? –
Gracias por enlazar a mi blog! – 1kevgriff