Ignorer un client lors de la diffusion d’un message avec SignalR

Je souhaite ignorer le client qui a demandé à diffuser le message de mon application Web. La seule façon pour moi de le faire est de mettre en cache le connectionId de l’utilisateur actuel

public class BroadcastHub : Hub { public override Task OnConnected() { System.Runtime.Caching.MemoryCache.Default.Set(HttpContext.Current.User.Identity.Name + "-connectionId", Context.ConnectionId, new CacheItemPolicy() { Priority = CacheItemPriority.Default, SlidingExpiration = TimeSpan.FromHours(1), AbsoluteExpiration = MemoryCache.InfiniteAbsoluteExpiration }); return base.OnConnected(); } public override Task OnReconnected() { System.Runtime.Caching.MemoryCache.Default.Set(HttpContext.Current.User.Identity.Name + "-connectionId", Context.ConnectionId, new CacheItemPolicy() { Priority = CacheItemPriority.Default, SlidingExpiration = TimeSpan.FromHours(1), AbsoluteExpiration = MemoryCache.InfiniteAbsoluteExpiration }); return base.OnReconnected(); } } 

Cela me permet d’effectuer les opérations suivantes dans la méthode d’action du contrôleur:

  IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext(); hubContext.Clients.AllExcept((ssortingng)MemoryCache.Default.Get(HttpContext.Current.User.Identity.Name + "-connectionId")).sendAddedPasswordDetail(addedPassword); 

Cette méthode semble fonctionner … mais je pense que ce pourrait être la mauvaise façon de faire les choses. Existe-t-il un meilleur moyen d’ignorer le client demandeur?

Il existe une propriété spécifique qui autorise cette exception particulière,

 hubContext.Clients.Others.YourMethodHere 

Vous pouvez le voir utilisé ici .

Edit: Selon la discussion dans les commentaires, le GlobalHost.ConnectionManager.GetHubContext Others n’est pas disponible lors de l’utilisation de GlobalHost.ConnectionManager.GetHubContext

Vous devrez soit continuer à utiliser votre méthode actuelle, soit trouver un moyen de déléguer cette activité au BroadcastHub pour pouvoir accéder à Others .