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

时间:2014-09-29 16:16:02

标签: c# asp.net-mvc 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<BroadcastHub>();
        hubContext.Clients.AllExcept((string)MemoryCache.Default.Get(HttpContext.Current.User.Identity.Name + "-connectionId")).sendAddedPasswordDetail(addedPassword);

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

1 个答案:

答案 0 :(得分:3)

有一个特定属性允许此特定异常,

hubContext.Clients.Others.YourMethodHere

您可以看到它使用here

修改 根据评论中的讨论,使用Others

时无法使用GlobalHost.ConnectionManager.GetHubContext<T>

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