2017-09-13 48 views
1

客户是否有办法来遍历客户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?)' 
+0

_ “两者都引发错误” _ - 你为什么不告诉我们的错误是什么。 – stuartd

+0

请分享此处的例外 –

+1

编辑例外 – Raghav

回答

1

signalR客户背后的想法是它没有实现IEnumerable接口,因此无法遍历在线用户。

但我会建议做一些自定义来覆盖一些signalR功能。所以你有两种方法我猜!

一种方法是将用户数据保存在数据库中的中心类上,并迭代保存在数据库中的连接,或者在这里关注这些博客以利用ajax调用来跟踪用户。

  1. Blog link 1
  2. Blog link 2