- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的中心内有一个方法,用于向特定客户发送票证已更新的信息。但是我希望它将它发送到 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/
我是一名优秀的程序员,十分优秀!