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
.