2017-08-13 4 views
0

私は、ゲートウェイといくつかのバックエンドサービスで構成されるWebアプリケーションを持っています。 ゲートウェイは自己ホスト型のOWINアプリケーションで、認証、承認、バックエンドへのAPI呼び出しのルーティングなどの問題を扱います。SignalRシンプルゲートウェイ

私はクライアントにデータをプッシュするために私のバックエンドサービスの一つでSignalRを使用することに興味があります。例えば。ユーザーは長時間実行されているクエリを開始し、利用可能になった時点でデータがクライアントにフィードバックされます。

(それは、このようなメッセージングのために設計されていなかったようですが)私は、「ゲートウェイ」のハブコード SignalR scaleout explanation

メッセージングメカニズムとして、スケールアウトの記事から、バックプレーンを使用するために管理:(ロジック唯一のバックエンド・コントローラ・コード

public override async Task OnConnected() 
    { 
     HttpClient client = new HttpClient() 
     { 
      BaseAddress = new Uri("http://localhost:8888/other/") 
     }; 

     var result = await client.PostAsJsonAsync("signin", Context.ConnectionId); 

     await base.OnConnected(); 
    } 

)テスト目的のためのものである

[HttpPost] 
    [Route("signin")] 
    public void PostSignin([FromBody]string id) 
    { 
     StartPing(id); 
    } 

    public async Task StartPing(string id) 
    { 
     var context = GlobalHost.ConnectionManager.GetHubContext<FrontendHub>(); 

     int i = 0; 
     while (true) 
     { 
      i++; 
      context.Clients.Client(id).showMessage("num " + i); 
      await Task.Delay(1000); 
     } 
    } 

しかし、これは大きなエンタープライズアプリケーションであり、ゲートウェイがバックエンドサービスの実際のコードに依存することは望ましくありません。しかし、この例は、ゲートウェイとバックエンドサービスの両方に同じ名前のハブが定義されている場合にのみ機能します。一方

、私はゲートウェイで、このような専門的なコードを配置する必要性を回避しようとしている一方で、私は、実際の関数名とパラメータを使用する能力を活用したいと思います。私は単一の機能を備えた「マスターハブ」を望んでいません。

これを行う方法はありますか?

答えて

0

はそれをすべてやって終わりではありませんでしたが、後に発見ソリューションは、確かに「マスターハブ」を使用していたが、それは実際にはまったくの機能を持っている必要はありません。

契約は、バックエンドサービスとクライアントアプリケーションの間です。 SignalRのすべてが緩やかに型付けされているので、クライアントがハブ上でいくつかの関数を定義し、バックエンドサービスがハブ上で同じ関数を呼び出すだけで十分です。ハブは、実際にはこの機能を独自のコードで必要としません。