Je souhaite appeler un client spécifique à partir du serveur et ne pas le diffuser à tous. Le problème est que je suis dans le champ de certaines AJAX (dans .aspx codebehind, disons)), et non dans Hub ou PersistentConnection; ajax (jquery) call n’est pas le client que je veux envoyer le message de signal!
Maintenant, j'ai un concentrateur appelé lors du chargement de la page JS, qui enregistre un nouveau client dans la liste statique du serveur. J'ai donc des guides client. Mais je ne sais pas comment utiliser cela pour envoyer un message du serveur à un client spécifique.
Voir la documentation pour la dernière:
Connexions persistantes - https://github.com/SignalR/SignalR/wiki/PersistentConnection
Hubs - http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server
$('#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);
}
Chaque fois que vous envoyez une demande au serveur concentrateur, votre demande aura un identifiant de connexion différent. J'ai donc ajouté une table de hachage statique contenant un nom d'utilisateur, qui ne change pas en permanence, ainsi qu'un identifiant de connexion du signal r, à chaque fois. vous vous connectez, l'identifiant de connexion sera mis à jour
$.connection.hub.start().done(function () {
chat.server.registerConId($('#displayname').val());
});
et dans le code serveur:
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);
}
}
Si l'utilisateur spécifique est réellement l'appelant, vous pouvez utiliser:
Clients.Caller.myJavaScriptClientFunction();
lorsque vous souhaitez envoyer un message à un identifiant spécifique
Clients.Client(Context.ConnectionId).onMessage(
new Message{From = e.Message.From, Body = e.Message.Body}
);