ASP.NET Core SignalR направляет сообщения только определенным клиентам - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть сайт ASP.NET Core, где я реализовал концентратор, называемый 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"  });

В идеале, я хотел бы отправить сообщение определенному клиенту, а не всемклиенты.Я знаю, что когда клиент соединяется, у меня есть Context.ConnectionId, доступный в методе OnConnectedAsync, но я не уверен, как сопоставить это, таким образом я могу направить определенные сообщения только определенным клиентам от Контроллера (или javascript).т.е. на моем веб-сайте происходит определенное действие, я хочу уведомить об этом только одного клиента, а не другого.

1 Ответ

0 голосов
/ 16 ноября 2018

Если вы используете последнюю версию, вы сможете сделать это по идентификатору пользователя.

public async Task SendMessage(string userId, string message)
{
    await Clients.User(userId).SendAsync(message);
}

OR

await _hubContext.Clients.User(userId).SendNotificationMessage(new NotificationMessage { "some message"  });
...