【问题标题】:Referencing an existing SignalR connection on the client side在客户端引用现有的 SignalR 连接
【发布时间】:2015-11-11 11:04:49
【问题描述】:

我在工作中遇到了一个问题,我希望这里的人可以提供帮助。

在不详细介绍应用程序本身的情况下,我们有一个需要使用 SignalR 的位置服务。这个想法是每个客户端(当我说“客户端”时,我的意思是“使用应用程序的人”)将被分配给一个特定的“任务”,并每 2 秒(可配置)将其 GPS 位置发送给 Azure 工作者角色,它将接收到的数据存储在两个 Azure 表中。然后,第二个工作角色将从表中获取数据并向执行给定任务的每个客户端发送 SignalR 消息,其中包含分配给同一任务的所有其他客户端的位置。

我目前拥有的是一个测试客户端(目前是 Winform,但它将是一个 UWP 应用程序),它可以成功地使用 SignalR 将位置消息直接发送到其他客户端,我不认为它会太很难插入 Azure 端的东西,但我的问题是弄清楚如何使用 SignalR 组来确保消息只发送到特定任务(我想最好的方法是用 ID 命名组任务),但是当首次建立集线器连接时,没有用于命名组的任务 ID,并且创建任务的代码点没有任何直接访问集线器信息的权限。我可能遗漏了一些明显的东西,但现在似乎没有任何方法可以将客户端添加到与创建任务时最初连接到的同一集线器连接上的组中。

TL-DR:我有没有办法将客户端添加到具有特定名称的 SignalR 组中,从另一个项目中的类,在应用启动时连接的集线器上?

【问题讨论】:

    标签: c# asp.net azure signalr


    【解决方案1】:

    1st 在某处保留一个 UserId - ConnectionId 关联表。

    第二次在创建任务时创建信号 R 组。

    第 3 次在任务分配时将每个用户的连接关联到信号 R 组。

    【讨论】:

    • 如果任务创建/分配类没有对集线器的引用,我如何在任务分配时创建 SignalR 组/分配与组的连接?
    • 任务分配至少应该有一个用户 ID 引用。因此,使用此用户 ID,您将获得集线器参考。
    • 他们确实有一个用户 ID 参考,但我不确定这与 SignalR 集线器有什么关系,因为它们是完全独立的。对不起,如果我听起来很愚蠢,我以前从未使用过 SignalR。
    • 公共覆盖任务 OnConnected() { RTMServerFactory.GetServer().AddConnectionsToUser(Context.ConnectionId,Int32 UserId);返回 base.OnConnected();其中 AddConnectionToUser 是保持这种关联的存储方法
    • 显然 RTMServerFactory 不存在。尝试谷歌搜索,但在代码中找不到任何示例。目前我的 SignalR 集线器位于解决方案中包含的 ASP.NET Web 应用程序中,这会有所不同吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2012-04-05
    • 2012-04-22
    • 1970-01-01
    相关资源
    最近更新 更多