web-dev-qa-db-fra.com

Appeler une méthode concentrateur à partir de l'action d'un contrôleur

Comment puis-je appeler une méthode concentrateur à partir de l'action d'un contrôleur? Quelle est la bonne façon de procéder?

Quelqu'un l'a utilisé dans un message:

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

Mais pour moi, c'est jeter:

L'utilisation d'une instance Hub non créée par HubPipeline n'est pas prise en charge.

J'ai également lu que vous pouvez créer un contexte de concentrateur, mais je ne veux pas donner la responsabilité de l'action, c'est-à-dire que l'action fait des choses comme:

hubContext.Client(...).someJsMethod(..)
42
sports

La bonne façon est de créer réellement le contexte du hub. Comment et où vous le faites, cela dépend de vous, voici deux approches:

  1. Créez une méthode statique dans votre hub (ne doit pas nécessairement être dans votre hub, pourrait en fait être n'importe où) et ensuite vous pouvez simplement l'appeler via AdminHub.SendMessage("wooo")

    public static void SendMessage(string msg)
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<AdminHub>();
        hubContext.Clients.All.foo(msg);
    }
    
  2. Évitez la méthode statique tous ensemble et envoyez simplement directement aux clients concentrateurs

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