【问题标题】:Signalr not sending to specific usersSignalr 未发送给特定用户
【发布时间】:2015-05-14 17:26:24
【问题描述】:

我的集线器内部有一个方法,用于向特定客户发送票证已更新。但是我希望它把它发送到控制器内部的服务器和特定的用户,你可以在下面看到我是怎么做的:

我正在使用以下方法发送给特定的客户:

public void NotifyUpdatedTicket(Ticket ticket, string note, params string[] aliases)
{
    foreach (string a in aliases)
    {
        foreach (string connectionId in _allConnections.GetConnections(a))
        {
            Clients.Client(connectionId).notifyUpdatedTicket(ticket, note);
        }
    }
}

_allConnections 与http://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections#inmemory 中的类相同

但是,我没有传递 1 个用户,而是传递了一个别名列表,然后获取他们的连接并发送到他们的连接 ID。

但是它似乎没有正确发送它发送给所有客户端。这是我用来调用控制器中的方法的命令:

GlobalHost.ConnectionManager.GetHubContext<TicketHub>().Clients.All.notifyUpdatedTicket(viewModel.Current, viewModel.NewNote, viewModel.Current.OpenedBy, viewModel.Current.AssignedTo);

当我发送带有特定 OpenedBy 和 AssignedTo 的上述命令时,它会在不应该发送给所有用户。

我是否错过了在控制器中调用它只将它发送给特定用户或其他东西的东西?

即使我将个人别名直接输入到集线器方法中,它仍然会发送给每个人。我认为这与控制器方法有关。

【问题讨论】:

  • 没人知道吗?

标签: c# asp.net-mvc signalr signalr-hub


【解决方案1】:

这个

Clients.All.notifyUpdatedTicket

将向所有客户端发送消息。它不会用这个签名调用你的方法(我假设这就是你想要做的):

public void NotifyUpdatedTicket(Ticket ticket, string note, params string[] aliases)

我假设这是您添加到中心类的方法。 如果方法的唯一目的是从服务器端调用,那么将方法放在集线器类中并不是一个好主意。

无论如何,如果你这样做了,你需要在该方法中使用GetHubContext&lt;TicketHub&gt;(),即使它是集线器类的一部分,因为集线器上下文是在对集线器的请求到达时设置为集线器管道的一部分.没有它,hub 只是一个普通的类,你无法访问像Clients 这样的动态成员。

因此,总而言之,您似乎对某些基本原理感到困惑。我建议将 NotifyUpdatedTicket 移动到一个单独的类,该类也缓存相关的集线器上下文,然后在需要时调用该方法(例如,如果这是您的意图,则从 MVC 控制器方法)。

【讨论】:

  • 教程中asp.net/signalr/overview/guide-to-the-api/…显示是从c#方法发送给客户端的。不知道我明白你在说什么。
  • 它从集线器方法发送到客户端,是的(SendChatMessage),但是您使用 GetHubContext 从其他地方调用(我不知道该代码在哪里);在他们的示例中,客户端正在调用 SendChatMessage,然后该方法正在传播到其他客户端;在您的示例中,您正在尝试从服务器启动(我认为;尚不完全清楚 GetHubContext().Clients.All... 调用在哪里);我的意思是,以 GlobalHost .. 开头的行将直接调用所有客户端,而不是遍历别名的辅助方法。
  • 你的意思在我脑海中响起。似乎现在正在工作。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 2020-10-09
相关资源
最近更新 更多