【发布时间】:2013-08-30 17:31:31
【问题描述】:
我有一个从 jscript 客户端调用的典型 Web api 控制器。在服务器处理请求期间,我想向一组信号器客户端发送消息,但对应于当前 web api http 请求的客户端除外。
在信号器上下文不可用的那一刻,我如何获取该连接 ID? 当然,我可以让客户端使用 http 请求的其余参数显式发送它,但我想知道是否有更优雅的方式。
【问题讨论】:
我有一个从 jscript 客户端调用的典型 Web api 控制器。在服务器处理请求期间,我想向一组信号器客户端发送消息,但对应于当前 web api http 请求的客户端除外。
在信号器上下文不可用的那一刻,我如何获取该连接 ID? 当然,我可以让客户端使用 http 请求的其余参数显式发送它,但我想知道是否有更优雅的方式。
【问题讨论】:
没有比这更优雅的方式了。连接 ID 存储在客户端上,通常与信号器客户端发出的每个请求一起传递。
【讨论】:
如果您实现了它,我已经创建了一个库,用于使您的后端服务总线和 SignalR 之间的差距更加无缝。你可以这样做,从你的 WebApi 方法
eventAggregator.Publish(new MyEvent(data));
还有我的事件
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
请注意,属于该用户的所有客户端都不会收到该事件
【讨论】: