有没有办法在SignalR中迭代客户端
All clients under a hub
All clients under a group
All client a user is connected to
我的目标是在每个循环中获取连接ID并逐个处理它们。
var hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
var allClients = hubContext.Clients.All;
var clientsOfGroup = allClients.Group(groupName);
我正在尝试上面的代码并迭代allClients和clientsOfGroup,两者都抛出错误。
有没有办法用SignalR获取连接ID?
编辑:
如果我运行以下代码:
foreach (var client in allClients)
{
}
我得到了这个例外:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:'不能 隐式转换类型'Microsoft。 Asp Net。 SignalR。集线器。 ClientProxy'到 'System.Collections.IEnumerable'。存在显式转换(是 你错过了一个演员?)'
如果我运行它:
foreach (var client in clientsOfGroup)
{
}
我得到以下异常
> Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'Cannot implicitly convert type 'System.Threading.Tasks.Task<object>' to
> 'System.Collections.IEnumerable'. An explicit conversion exists (are
> you missing a cast?)'
答案 0 :(得分:1)
signalR客户端背后的想法是它没有实现IEnumerable接口,因此无法迭代在线用户。
但我建议制作一些自定义来覆盖一些signalR功能。所以我猜你有两种方法!
一种方法是将用户数据保存在集线器类的数据库中,并迭代保存在数据库中的连接,或者在此处关注这些博客,以利用ajax调用来跟踪用户。
答案 1 :(得分:0)
您可以使用反射对连接进行迭代。
Output