gpt4 book ai didi

c# - Signalr 不发送给特定用户

转载 作者:行者123 更新时间:2023-11-30 17:44:47 25 4
gpt4 key购买 nike

我的中心内有一个方法,用于向特定客户发送票证已更新的信息。但是我希望它将它发送到 Controller 内的服务器和特定用户,您可以在下面看到我是如何做的:

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

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。

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

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

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

我是否遗漏了在仅将其发送给特定用户或其他什么的 Controller 中调用它的内容?

即使我将人员别名直接放入集线器方法中,它仍然会发送给所有人。我认为这与 Controller 方法有关。

最佳答案

这个

Clients.All.notifyUpdatedTicket

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

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

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

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

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

关于c# - Signalr 不发送给特定用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29011760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com