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();
Ver los documentos para la última:
Conexiones persistentes - https://github.com/SignalR/SignalR/wiki/PersistentConnection
Hubs - http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server
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);
}