【问题标题】:Get signalr connection id outside the context of a signalr call在信号器调用的上下文之外获取信号器连接 ID
【发布时间】:2013-08-30 17:31:31
【问题描述】:

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

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

【问题讨论】:

    标签: asp.net-web-api signalr


    【解决方案1】:

    没有比这更优雅的方式了。连接 ID 存储在客户端上,通常与信号器客户端发出的每个请求一起传递。

    【讨论】:

      【解决方案2】:

      如果您实现了它,我已经创建了一个库,用于使您的后端服务总线和 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

      请注意,属于该用户的所有客户端都不会收到该事件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-07
        • 2020-05-09
        • 1970-01-01
        • 1970-01-01
        • 2014-08-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多