【问题标题】:access Context.ConnectionID outside of hub in SignalR在 SignalR 中访问集线器外部的 Context.ConnectionID
【发布时间】:2021-03-29 04:02:35
【问题描述】:

我希望能够使用 SignalR 向特定用户帐户发送消息。
现在我可以发送给所有人!
我正在寻找任何方式来访问集线器之外的控制器中的 context.ConnectionID。我尝试使用 iHubContext 在控制器内部访问它,在集线器内部我尝试在会话中保存 connectionID 的值,但两者都不支持。

从 Hub 外部的 Controller 访问 connectionID 的最佳方式是什么?

这是来自 ChatController 的操作方法,用于向所有人发送消息

public IActionResult PosaljiPoruku()
    {
        _hubContext.Clients.All.SendAsync("PrimljenaPoruka", "aaa");
        return PartialView("SubmitFormPartial");
    }

感谢任何帮助!
感谢您的帮助!

【问题讨论】:

  • 嗨@sasko,有关于这个案例的最新消息吗?
  • 不幸的是,没有弄清楚如何将用户和 connectionID 映射在一起。

标签: asp.net-core .net-core signalr signalr-hub asp.net-core-signalr


【解决方案1】:

从 Hub 外部的 Controller 访问 connectionID 的最佳方式是什么?

来自this doc关于从集线器外部发送消息,您会发现:

当从Hub 类外部调用集线器方法时,没有调用者与调用相关联。因此,无法访问ConnectionIdCallerOthers 属性。

我希望能够使用 SignalR 向特定用户帐户发送消息。

您可以在客户端连接到 Hub 服务器时映射用户和ConnectionId(s),然后如果您想从 Hub 外部的控制器操作向特定用户发送消息,您可以先查询映射表以获取相应的连接 Id(s)基于用户名等,并将连接 ID 传递给操作方法。

await _hubContext.Clients.Client("connection_id_here").SendAsync("PrimljenaPoruka", "aaa");

此外,您可以通过创建单用户组(每个用户的组)来实现相同的目的,然后在您只想联系该特定用户时向该组发送消息。

await _hubContext.Clients.Group("group_name_here").SendAsync("PrimljenaPoruka", "aaa");

【讨论】:

  • 嗨!感谢回复。很抱歉,我答复晚了!我想以某种方式将 connectionID 映射到用户。但我无法在文档之外找到如何做到这一点的示例。 AFAIK,因为我使用 ihubcontext 进行连接,所以我无法从控制器中的集线器调用任何自定义方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
相关资源
最近更新 更多