迭代Signalr中的客户端

时间:2017-09-13 10:47:37

标签: c# asp.net .net 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:'不能   隐式转换类型'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?)'

2 个答案:

答案 0 :(得分:1)

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

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

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

  1. Blog link 1
  2. Blog link 2

答案 1 :(得分:0)

您可以使用反射对连接进行迭代。

Output