[英]Ignoring a client when broadcasting a message with SignalR
我想忽略發出請求廣播我的Web應用程序消息的客戶端。 我似乎可以做到這一點的唯一方法是緩存當前用戶的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<BroadcastHub>();
hubContext.Clients.AllExcept((string)MemoryCache.Default.Get(HttpContext.Current.User.Identity.Name + "-connectionId")).sendAddedPasswordDetail(addedPassword);
這種方法似乎有效...但是我認為這可能是錯誤的處理方式。 有沒有更好的方法可以忽略發出請求的客戶端?
有一個允許此特定異常的特定屬性,
hubContext.Clients.Others.YourMethodHere
您可以在這里看到它。
編輯:根據評論中的討論,使用GlobalHost.ConnectionManager.GetHubContext<T>
時Others
不可用
您將需要繼續使用當前方法,或者找到一種方法將此活動委托給BroadcastHub
來訪問“ Others
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.