我有一个典型的web api控制器,它是从jscript客户端调用的。在服务器处理请求期间,我想向一组signaler客户端发送消息,但与当前web api http请求相对应的客户端除外。
在信号器上下文不可用的情况下,我如何获取连接id?当然,我可以让客户端显式地将其与http请求的其余参数一起发送,但我想知道是否有更优雅的方法。
没有比这更优雅的方式了。连接id存储在客户端上,通常会随signaler客户端发出的每个请求一起传递。
我已经创建了一个库,如果您实现了它,可以使后端服务总线和SignalR之间的间隙更加无缝。您可以通过WebApi方法这样做
eventAggregator.Publish(new MyEvent(data));
和MyEvent
public class MyEvent : Event
{
public MyEvent(Data data)
{
this.PerformedBy = Thread.CurrentPrincipal.Identity.Name;
}
}
然后为该事件创建一个约束处理程序
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
注意,属于所述用户的所有客户端都不会获得事件