Получить вызывающего абонента в SignalR

#asp.net-mvc #signalr

#asp.net-mvc #signalr

Вопрос:

Как получить вызывающего абонента SignalR за пределами класса hub? Сначала я реализую контекст, но не могу повторно получить идентификатор вызывающего абонента или соединения.

     private readonly IHubContext _hubContext;

    public HomeController()
    {
        _hubContext = GlobalHost.ConnectionManager.GetHubContext<ProgressHub>();
    }
 

Свойство connectionId также не может получить доступ из HomeController.

 public class ProgressHub : Hub
{
    public string ConnectionId { get; set; }
    public override Task OnConnected()
    {
        ConnectionId = Context.ConnectionId;
        return base.OnConnected();
    }
}
 

И, наконец, ошибка при попытке доступа к концентратору на клиенте
var id = $.connection.hub.id;

Ответ №1:

Вы не можете. Подумайте об этом: как вы могли бы получить вызывающего абонента из-за пределов хаба при любых обстоятельствах? Возможно, вы выполняете вызов, который не был выполнен через SignalR, поэтому в таком случае у вас не может быть вызывающего абонента. IHubContext должен охватывать все случаи, поэтому он не может предложить такую опцию.

Комментарии:

1. Например, у меня есть событие на клиенте, подобное нажатию кнопки, затем повторно запрашиваю connectionid, например «c96b4106-9986-4786- a755-eedccd204c79» и отправить в HomeController. Почему я не могу ссылаться на конкретное соединение в этом случае? Возможно только для всех или группы и никаких вариантов?

2. Это другое, это не вызывающий абонент, а конкретное соединение. В этом случае вы можете использовать клиентский элемент Clients — msdn.microsoft.com/en-us/library /…

3. Не могли бы вы посоветовать какой-либо источник, как создать простой индикатор выполнения?

4. Нет, но просто используйте индикатор выполнения jQuery и обновите его значение из события SignalR на стороне клиента, это должно быть довольно просто. api.jqueryui.com/progressbar

5. Ошибка на стороне клиента не является проблемой. Мне нравится этот angular-ui.github.io/bootstrap . Я имею в виду, как запустить счетчик вне класса Hub и транслировать статус в режиме реального времени только «вызывающему», а не всем.