使用SignalR广播消息时忽略客户端

我想忽略提出请求广播我的网络应用程序的消息的客户端。 我似乎可以这样做的唯一方法是缓存当前用户的connectionId:

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(); } } 

这允许我在控制器动作方法中执行以下操作:

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

这种方法似乎有效…但我认为它可能是错误的做事方式。 有没有更好的方法来忽略请求客户端?

有一个特定的属性允许这个特殊的例外,

 hubContext.Clients.Others.YourMethodHere 

你可以在这里看到它。

编辑:根据评论中的讨论,使用GlobalHost.ConnectionManager.GetHubContextOthers不可用

您将需要继续使用当前方法或找到一种方法将此活动委派给BroadcastHub以访问Others