【发布时间】:2018-11-15 17:32:51
【问题描述】:
我有一个 ASP.NET Core 站点,我在其中实现了一个 Hub,称为 NotificationHub:
public interface INotificationHub
{
Task SendNotificationMessage(NotificationMessage message);
}
public class NotificationHub : Hub<INotificationHub>
{
public async Task SendMessage(NotificationMessage message)
{
await Clients.All.SendNotificationMessage(message);
}
}
我有两个可以成功连接到集线器并发送/接收消息的 winforms 客户端。我的网站上还有一个页面,可以通过注入到我的控制器中的 HubContext 发送消息。
await _hubContext.Clients.All.SendNotificationMessage(new NotificationMessage { "some message" });
理想情况下,我希望将消息发送到特定客户端而不是所有客户端。我知道当客户端连接时,我在 OnConnectedAsync 方法中有可用的 Context.ConnectionId,但我不确定如何映射它,因此我只能将某些消息从控制器(或 javascript)路由到某些客户端。即,我的网站上发生了某项活动,我只想通知一个客户而不是另一个客户。
【问题讨论】:
-
第一件事。您的客户有关联的用户登录?可以匿名吗?发出此通知的条款是什么?
-
如果客户端是登录用户,您可以定义一个字典,其中包含连接的客户端 connectionId 值,与登录的用户名或 ID 相关联。或者您可以添加其他字段以将 connectionId 保存到 users 表,但在这种情况下,您必须在每次连接断开后更新相关的 db 字段。
-
我没有任何安全设置,因为我不确定如何实施。我读过有关使用 JWT 令牌的信息,这是正确的想法吗?
-
@Laz Ziya,我应该把这本词典放在哪里?我需要从控制器访问它,但无法存储在 Hub 中。
标签: asp.net-core asp.net-core-signalr