2017-11-30 5 views
2

強く型付けされたハブのメソッドをサーバーから呼び出す方法を理解しようとしています。私がプッシュするかもしれない、サーバー上の通常SignalR - 静的に型指定されたハブをコンテキストから呼び出す

public class MessageHub: Hub<IMessageHub> 
{ 
    public async Task Create(Message message) 
    { 
     await Clients.All.Create(message);  
    } 
} 

public interface IMessageHub 
{ 
    Task Create(Message message); 
} 

などのように見えるハブ:私はstongly入力されたハブ・インターフェースを持っている。ネットコア2.0

を使用していますコンテンツをクライアントに送信します。

[Route("api/[controller]")] 
public MessagesController : Controller 
{ 
     IHubContext<MessagesHub> context; 
     public MessagesController(IHubContext<MessagesHub> context) 
     { 
      this.context = context; 
     } 

     public Message CreateMessage(Message message) 
     { 
      this.context.Clients.All.InvokeAsync("Create", message); 
      return message; 
     } 
} 

静的型付きハブのメソッドを呼び出すにはどうすればよいですか?ハブの仕組みに関する誤解?

+0

https://stackoverflow.com/questions/46904678/を参照してください。 call-signal-core-hub-method-from-controller/46906849#46906849。ソリューション2では、ソリューションを見つけることができます。 – Tester

+0

@Testerこれまでにやったことはありませんでしたが、私は質問を簡略化しました。私の本当の問題は、私のクライアントインターフェイスがクライアントにプッシュするためにDTOを取り込むGenericであればどうでしょうか? –

答えて

1

はいできます。ハブから

public interface ITypedHubClient 
    { 
    Task BroadcastMessage(string name, string message); 
    } 

継承:あなたは、サーバーがクライアント上で呼び出すことのできる方法を定義する場所

シンプルなインターフェイスを作成します。ここではステップによるサンプル段階で注入し

public class ChatHub : Hub<ITypedHubClient> 
     { 
     public void Send(string name, string message) 
     { 
      Clients.All.BroadcastMessage(name, message); 
     } 
     } 

はあなたコントローラーに入力したハブコンテキストを使用して作業してください:

[Route("api/demo")] 
    public class DemoController : Controller 
    { 
    IHubContext<ChatHub, ITypedHubClient> _chatHubContext; 
    public DemoController(IHubContext<ChatHub, ITypedHubClient> chatHubContext) 
    { 
     _chatHubContext = chatHubContext; 
    } 
    // GET: api/values 
    [HttpGet] 
    public IEnumerable<string> Get() 
    { 
     _chatHubContext.Clients.All.BroadcastMessage("test", "test"); 
     return new string[] { "value1", "value2" }; 
    } 
    } 
+0

これは正しい答えですが、インターフェイスタイプがジェネリックパラメータ –

+0

@johnny 5を受け取ったときに私がこれを行う方法を知っていますか分かりません。私は今日最初の夜にテストしなければなりません – Tester

+0

ありがとう、私はいくつかの主要なアーキテクチャの問題に立ち往生しています、私は私がやりたいことが可能かどうか、私はまたIHubContextの不変のバージョンを探していますすべてを再設計する –

関連する問題