webform tutorial net mvc entre ejemplos diferencias asp asp.net-mvc asp.net-mvc-4 signalr signalr-hub

asp.net mvc - tutorial - Llamar a un método concentrador desde la acción de un controlador



webform mvc (1)

¿Cómo puedo llamar a un método concentrador desde la acción de un controlador? ¿Cuál es la forma correcta de hacer esto?

Alguien usó esto en una publicación:

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

Pero para mí, eso es arrojar:

No se admite el uso de una instancia de Hub no creada por HubPipeline.

También he leído que puedes crear un contexto central, pero no quiero dar la responsabilidad a la acción, es decir, la acción haciendo cosas como estas:

hubContext.Client(...).someJsMethod(..)


La forma correcta es crear realmente el contexto del centro. Cómo y dónde lo hace depende de usted, aquí hay dos enfoques:

  1. Cree un método estático en su concentrador (no tiene que estar en su concentrador, podría estar en cualquier lugar) y luego simplemente puede llamarlo a través de AdminHub.SendMessage("wooo")

    public static void SendMessage(string msg) { var hubContext = GlobalHost.ConnectionManager.GetHubContext<AdminHub>(); hubContext.Clients.All.foo(msg); }

  2. Evite el método estático todos juntos y simplemente envíelo directamente a los clientes de hubs

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