tutorial signal net mvc microsoft hubconnection hubconfiguration hub example aspnet asp asp.net signalr

asp.net - net - Llame al cliente específico de SignalR



signalr hubconnection javascript (5)

Cada vez que envíe una solicitud al servidor concentrador, su solicitud tendrá una ID de conexión diferente, por lo que agregué una tabla hash estática que contiene un nombre de usuario, que no cambia continuamente, y una ID de conexión para la señal r, cada vez te conectas, la id de conexión se actualizará

$.connection.hub.start().done(function () { chat.server.registerConId($(''#displayname'').val()); });

y en el código del servidor:

public class ChatHub : Hub { private static Hashtable htUsers_ConIds = new Hashtable(20); public void registerConId(string userID) { if(htUsers_ConIds.ContainsKey(userID)) htUsers_ConIds[userID] = Context.ConnectionId; else htUsers_ConIds.Add(userID, Context.ConnectionId); } }

Quiero llamar a un cliente específico desde el servidor, y no transmitir a todos ellos. El problema es que estoy en el alcance de alguna solicitud AJAX (en .aspx codebehind digamos), y no en Hub o PersistentConnection, así que no tengo la propiedad Clients - y el cliente que hizo esa llamada ajax (jquery) no es el cliente Quiero enviar un mensaje de señal!

Ahora, tengo un concentrador al que se llama en la carga de páginas JS, que registra un nuevo cliente en la lista estática del servidor, por lo que tengo Guías de clientes. Pero no sé cómo usar eso para enviar mensajes desde el servidor a un cliente específico.


Si el usuario específico es en realidad el que llama, puede usar:

Clients.Caller.myJavaScriptClientFunction();



cuando quieres enviar un mensaje a una identificación específica

Clients.Client(Context.ConnectionId).onMessage( new Message{From = e.Message.From, Body = e.Message.Body} );


$(''#sendmessage'').click(function () { // Call the Send method on the hub. chat.server.send($(''#displayname'').val(), $(''#message'').val(), $.connection.hub.id); // Clear text box and reset focus for next comment. $(''#message'').val('''').focus(); });

en el lado del servidor, envíe el ID del cliente y la respuesta a ese ID

public void Send ( string name , string message , string connID ) { Clients.Client(connID).broadcastMessage(name , message); }