Envoyer un message à l'utilisateur spécifique dans signalr
J'ai un signalR Serveur(Application Console) et une application cliente(Asp.net MVC5)
Comment je peux envoyer un message à l'utilisateur spécifique dans OAuth Adhésion.
En fait, je ne peux pas résoudre expéditeur à l'utilisateur de hub contexte de demande.
Context.User.Identity.Name
Mon Hub
public class UserHub : Hub
{
#region Hub Methods
public void LoggedIn(string userName, string uniqueId, string ip)
{
Clients.All.userLoggedIn(userName, uniqueId, ip);
}
public void LoggedOut(string userName, string uniqueId, string ip)
{
var t = ClaimsPrincipal.Current.Identity.Name;
Clients.All.userLoggedOut(userName, uniqueId, ip);
}
public void SendMessage(string sendFromId, string userId, string sendFromName, string userName, string message)
{
Clients.User(userName).sendMessage(sendFromId, userId, sendFromName, userName, message);
}
#endregion
}
Démarrer classe hub(le Programme.cs)
class Program
{
static void Main(string[] args)
{
string url = string.Format("http://localhost:{0}", ConfigurationManager.AppSettings["SignalRServerPort"]);
using (WebApp.Start(url))
{
Console.WriteLine("Server running on {0}", url);
Console.ReadLine();
}
}
}
même si vous avez déjà accepté la réponse à la question ci-dessous, je vous suggère de donner un coup d'oeil à ceci: stackoverflow.com/a/21355406/720780
OriginalL'auteur Mahdi.momtaheni | 2015-06-30
Vous devez vous connecter pour publier un commentaire.
Garder
connectionId
avecuserName
par la création d'une classe que nous savons queSignalr
seulement les informations deconnectionId
de chaque pairs connectés.Créer une classe
UserConnection
Déclarer une liste
passe nom d'utilisateur de la chaîne de recherche lors de la connexion à partir du côté client
Pousser l'utilisateur à la connexion à cette liste des connectés mthod
À partir de l'envoi de message de recherche de nom d'utilisateur dans la liste puis retrive l'utilisateur connectionid puis envoyer
DÉMO
IUserIdProvider
mise en œuvre, où vous pouvez gérer votre chaîne de requête, par exemple, puis à l'aide de laClients.User
méthode. Pas besoin de mantain de toute autre liste d'id de connexion.Pour un .Net client,
var connection = new HubConnection(url, queryString)
peut être utilisé. Par exemple:var connection = new HubConnection("http://localhost:8080/","name=abc")
Cela peut-il
sendMessage
être dynamique ? -> Tout moyen de passer cettesendMessage
nom de la méthode questring
, semblable à la façon dont nous utilisonsInvoke
méthode. ?J'ai deux questions ici. 1.) Supposons que si un utilisateur ouvre un nouvel onglet, alors il y aura deux différents id de connexion. Donc, dans ce cas, nous allons avoir deux id de connexion pour un utilisateur unique. et avoir à envoyer un message à la fois des connexions. Droit? 2.) Le maintien d'une liste est une bonne pratique. Supposons que, Si nous avons des milliers d'utilisateurs ensuite, cette liste va être assez grand. Est-il un autre moyen optimisé disponibles pour obtenir le même résultat?
1) vérifier une connexion des utilisateurs existe ou non sur la base de son nom d'utilisateur avant de l'affecter à la liste. si l'utilisateur existe, vous pouvez mettre à jour l'id de connexion ou de jeter le nouvel identifiant de connexion qui est à vous. 2) si la liste est grande, alors, utilisez une petite base de données de la requête est plus rapide. C'est totalement basé sur les besoins de votre système.
OriginalL'auteur Anik Islam Abhi
Toutes ces réponses sont inutilement complexes. J'ai simplement remplacer "OnConnected()", saisir le Contexte unique.ConnectionId, puis immédiatement à la diffusion pour le client javascript pour le client de les stocker et de les envoyer avec les appels suivants à votre serveur de transport hub.
Dans le javascript:
OriginalL'auteur Bob Quinn
Afin d'être en mesure d'obtenir de Contexte".De l'utilisateur.l'identité.Name", vous êtes censé intégrer votre authentification en OWIN pipeline.
Plus d'informations peuvent être trouvées dans cette SORTE de réponse: https://stackoverflow.com/a/52811043/861018
OriginalL'auteur Illidan
Dans ChatHub de la Classe à Utiliser pour des Spacific Utilisateur
OriginalL'auteur waqar iftikhar