#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 и транслировать статус в режиме реального времени только «вызывающему», а не всем.