从控制器的动作中调用集线器方法

问题描述 投票:48回答:2

我如何从控制器的动作中调用集线器方法?正确的做法是什么?

有人在帖子中使用了此:

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

但是对我来说,这是抛出:

不支持使用不是由HubPipeline创建的Hub实例。

我还阅读了您可以创建中心上下文的信息,但我不想赋予该操作以责任,即该操作的行为类似于:

hubContext.Client(...).someJsMethod(..)
asp.net-mvc asp.net-mvc-4 signalr signalr-hub
2个回答
108
投票

正确的方法是实际创建中心环境。如何以及在何处执行此操作取决于您,这是两种方法:

  1. 在集线器中创建一个静态方法(不必在集线器中,实际上可以在任何地方),然后可以通过AdminHub.SendMessage("wooo")进行调用>

    public static void SendMessage(string msg)
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<AdminHub>();
        hubContext.Clients.All.foo(msg);
    }
    
  2. 一起避免使用静态方法,仅直接发送给集线器客户端

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

0
投票

根据aspnet3.1

© www.soinside.com 2019 - 2024. All rights reserved.