67 votes

Appelez un client spécifique de SignalR

Je veux l'appeler spécifiques du client à partir du serveur et à ne pas diffuser à l'ensemble d'entre eux. Le problème est que je suis dans le champ d'application de certaines requêtes AJAX (en .aspx le code-behind disons), et pas du Moyeu ou PersistentConnection, donc ne pas avoir les biens des Clients et le client qui fait que l'ajax (jquery) l'appel n'est pas le client que je veux envoyer signalr message!

Maintenant, j'ai un hub qu'elle est appelée sur JS chargement de la page, qui enregistre un nouveau client dans le serveur de liste statique, donc j'ai Guid de client. Mais vous ne savez pas comment l'utiliser pour envoyer un message depuis le serveur vers le client.

46voto

dfowler Points 16530

25voto

user2201030 Points 41
 $('#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();
});
 

côté serveur envoie l'identifiant du client et la réponse à cet identifiant

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

10voto

Nada Naeem Points 26
 every time you send arequest to the hub server,
 

votre demande aura un identifiant de connexion différent, alors, J'ai ajouté une table de hachage statique qui contient un nom d'utilisateur - qui ne change pas continuellement, et une connexion id du signal r, chaque fois que vous vous connectez, l'identifiant de connexion sera mis à jour

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

public class ChatHub : Hub
    {
        private static Hashtable htUsers_ConIds = new Hashtable(20);
        public void registerConId(string userID)
        {
            bool alreadyExists = false;
            if(htUsers_ConIds.Count == 0)
            {
                htUsers_ConIds.Add(userID, Context.ConnectionId);
            }
            else
            {
                foreach (string key in htUsers_ConIds.Keys)
                {
                    if (key == userID) 
                    {
                        htUsers_ConIds[key] = Context.ConnectionId;
                        alreadyExists = true;
                        break;
                    }
                }
                if(!alreadyExists)
                {
                    htUsers_ConIds.Add(userID, Context.ConnectionId);
                }
            }
        }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X