Подтвердить что ты не робот

Вызов метода хаба из действия контроллера

Как я могу вызвать метод хаба из действия контроллера? Каков правильный способ сделать это?

Кто-то использовал это в сообщении:

DefaultHubManager hd = new DefaultHubManager(GlobalHost.DependencyResolver);
var hub = hd.ResolveHub("AdminHub") as AdminHub;
hub.SendMessage("woohoo");

Но для меня это бросает:

Использование экземпляра Hub, не созданного HubPipeline, не поддерживается.

Я также читал, что вы можете создать контекст концентратора, но я не хочу отвечать на действие, то есть действие, выполняющее такие вещи, как:

hubContext.Client(...).someJsMethod(..)
4b9b3361

Ответ 1

Правильный способ - создать контекст концентратора. Как и где вы делаете это зависит от вас, вот два подхода:

  • Создайте статический метод в своем концентраторе (не обязательно в вашем концентраторе, на самом деле может быть где угодно), а затем вы можете просто вызвать его через AdminHub.SendMessage("wooo")

    public static void SendMessage(string msg)
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<AdminHub>();
        hubContext.Clients.All.foo(msg);
    }
    
  • Избегайте статического метода вместе и просто отправляйте напрямую клиентам узлов.

        var hubContext = GlobalHost.ConnectionManager.GetHubContext<AdminHub>();
        hubContext.Clients.All.foo(msg);