簡體   English   中英

使用SignalR廣播消息時忽略客戶端

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM