我有一个 Aspmet 核心 3.1 MVC 应用程序,我在其中配置了一个 SignalR 集线器。
我有一个控制器,我在其中进行依赖注入 o
IHubContext
.
private readonly IHubContext<MesHub> _hubContext;
在我的
MesHub
课上,我有一个连接方法。
public override Task OnConnectedAsync()
{
string name = Context.User.Identity.Name;
if (name == null)
name = "Service";
Groups.AddToGroupAsync(Context.ConnectionId, name);
return base.OnConnectedAsync();
}
我已经关闭了方法和原理效果非常好。
要向所有登录中心的用户发送消息,我使用以下代码。
await _hubContext.Clients.All.SendAsync("AtualizaCardOP","message 1");
但是我现在要做的是向除了发出请求的用户之外的每个用户发送另一条消息。我尝试了很多方法,但找不到方法。
我不禁注意到 _hubContext.Clients 中有 AllExcept 和 GroupExcept 方法......但令人惊讶的是我无法让它们工作。
尝试过但不起作用的例子:
string idUserSignalR = this.User.Identity.Name;
await _hubContext.Clients.AllExcept(idUserSignalR).SendAsync("AtualizaPosicaoCardOP", "Mensagem aqui");
await _hubContext.Clients.GroupExcept(idUserSignalR, idUserSignalR).SendAsync("AtualizaPosicaoCardOP", "Mensagem aqui");
这是一张图片,由于第二个参数,我不明白如何让它工作。
我做错了什么?
有办法做我想做的事吗?
对于 GroupExcept 和 AllExcept,正确的用法应该如下所示。
// Add idUserSignalR into List<String>
string idUserSignalR = this.User.Identity.Name;
// Add below
List<string> idUserSignalR_List = new List<string>();
idUserSignalR_List.Add(idUserSignalR);
public IReadOnlyList<string> readOnlyData = idUserSignalR_List.AsReadOnly();
await _hubContext.Clients.AllExcept(readOnlyData).SendAsync("AtualizaPosicaoCardOP", "Mensagem aqui");
await _hubContext.Clients.GroupExcept("group_Name", readOnlyData).SendAsync("AtualizaPosicaoCardOP", "Mensagem aqui");