遍历在Signalr
问题描述:
客户是否有办法来遍历客户SignalR遍历在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: '不能 类型隐式转换'微软。 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?)'
答
signalR客户背后的想法是它没有实现IEnumerable接口,因此无法遍历在线用户。
但我会建议做一些自定义来覆盖一些signalR功能。所以你有两种方法我猜!
一种方法是将用户数据保存在数据库中的中心类上,并迭代保存在数据库中的连接,或者在这里关注这些博客以利用ajax调用来跟踪用户。
_ “两者都引发错误” _ - 你为什么不告诉我们的错误是什么。 – stuartd
请分享此处的例外 –
编辑例外 – Raghav