web-dev-qa-db-ja.com

コントローラーのアクションからハブメソッドを呼び出す

コントローラーのアクションからハブメソッドを呼び出すにはどうすればよいですか?これを行う正しい方法は何ですか?

誰かがこれを投稿で使用しました:

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

しかし、私にとっては、それは投げています:

HubPipelineで作成されていないハブインスタンスの使用はサポートされていません。

また、ハブコンテキストを作成できることも読みましたが、アクション、つまり次のようなアクションを行うアクションの責任を負いたくありません。

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

正しい方法は、ハブコンテキストを実際に作成することです。それをどのように、どこで行うかはあなた次第です。2つのアプローチがあります。

  1. ハブに静的メソッドを作成し(ハブにある必要はなく、実際にどこにでも存在できます)、AdminHub.SendMessage("wooo")経由で呼び出すことができます。

    public static void SendMessage(string msg)
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<AdminHub>();
        hubContext.Clients.All.foo(msg);
    }
    
  2. 一緒に静的メソッドを回避し、ハブクライアントに直接送信するだけです

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