在signalr调用的上下文之外获取signalr连接ID

时间:2013-08-30 17:31:32

标签: asp.net-web-api signalr

我有一个典型的web api控制器,它是从jscript客户端调用的。在服务器处理请求期间,我想向一组信号器客户端发送消息,除了与当前web api http请求对应的客户端。

如何在信号器上下文不可用时获取该连接ID? 当然,我可以让客户端使用http请求的其余参数显式发送它,但我想知道是否有更优雅的方式。

2 个答案:

答案 0 :(得分:3)

没有更优雅的方式。连接ID存储在客户端上,通常随信号器客户端发出的每个请求都会被传递。

答案 1 :(得分:0)

如果您实现了它,我已经创建了一个库,用于使后端服务总线和SignalR之间的差距更加无缝。您可以通过WebApi方法

这样做
eventAggregator.Publish(new MyEvent(data));

和MyEvent

public class MyEvent : Event 
{
   public MyEvent(Data data) 
   {
      this.PerformedBy = Thread.CurrentPrincipal.Identity.Name;
   }
}

然后为该事件

创建一个Constraint处理程序
public class MyEventConstraint : EventConstraintHandler<Event>
{
   public bool Allow(MyEvent myEvent, username, dynamic constraint) 
   {
      return myEvent.PerformedBy != username;
   }
}

您还可以使MyEvent成为通用的,以便您可以将其重复用于所有实体

更多信息以及如何设置 https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki

请注意,属于该用户的所有客户都不会获得该活动