В моем приложении я планирую использовать SignalR для того, чтобы внутренний код отправлял сообщения вошедшему в систему пользователю в зависимости от условий, возникающих на сервере.
В частности, я хочу, чтобы SignalR вызывал методы на клиенте JS всякий раз, когда что-то происходит на сервере. Это могут быть периодические вычисления, происходящие на бэкэнде, которые внезапно превышают пороговое значение, и мне нужно вызвать что-то на клиенте JS для конкретного пользователя. Конкретный пользователь является ключевым элементом здесь. Только Пользователь, который должен знать об этом.
Я предполагаю, что это должно быть очень просто с SignalR, но у меня есть некоторые проблемы с пониманием того, как реализовать это. Мое решение следующее:
- Каждый раз, когда пользователь входит в систему, я создаю группу SignalR и добавляю этого пользователя в эту группу.
- Каждый раз, когда пользователь выходит из системы, я удаляю его из группы. (Я не знаю, могу ли я также удалить саму группу)
- Теперь каждый раз, когда что-то происходит на сервере, я использую SignalR для передачи информации конкретному Пользователю, который должен знать об этом событии, путем вызова метода клиента JS и отправки в группу с именем, равным Идентификатору имени пользователь интереса.
Итак, чтобы применить это решение, мне нужно получить информацию о пользователе, который только что вошел в C # Hub, чтобы создать группу и присоединиться к нему.
Теперь моя проблема в том, как получить доступ к необходимой мне информации от пользователя, который входит в приложение в C # Hub. Меня интересует идентификатор имени пользователя, конечно. Я думал, что свойство Context в хабе должно дать мне необходимую информацию (это мое понимание документов MS), но я не могу заставить ее работать. Пожалуйста, изучите ниже код.
// As soon as a User logs in, below method fires. I try to get the information
// in here but no success
public override async Task OnConnectedAsync()
{
var CID = Context.ConnectionId; // this gives a unique connection ID
var user = Context.User; // This returns nothing
var userID = Context.UserIdentifier; // This returns nothing
var httpContextObject = Context.GetHttpContext(); // This returns nothing
await base.OnConnectedAsync();
}
Когда я вызываю другие методы в C # Hub из JS, метод запускается и
информация передается, но я до сих пор не имею доступа к информации
Свойство Context должно предоставить.
Пожалуйста, помогите мне сначала, подтвердив или исправив мой общий подход, и если есть хорошо известные лучшие практики. Во-вторых, пожалуйста, дайте мне знать, как я могу получить информацию, которую Свойство контекста предоставляет в Концентраторе, и вообще, где эта информация доступна, и как получить к ней доступ и использовать.
Большое спасибо заранее.