2016-08-08 2 views
0

からSignalRクライアントを呼び出す以下のシナリオ:SPAを提供するSignalRハブを実行しているASP.NET Web APIがあります。 SignalRハブは、複数のC#SignalRクライアントと通信するために使用されます。 これで、特定のクライアントからデータを取得し、このデータをWeb APIコントローラからWebクライアントに戻したいとします。以下のサンプルをご覧ください:Web APIコントローラ

public async Task<IHttpActionResult> Get() 
    { 
     Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext<Hubs.ConfigHub>().Clients.Client("SomeConnectionId").getData(); 
     // SignalR client is calling a callback method on the SignalR hub hosted in the web api 
     // return data; 
    } 

私はこれをどのように達成することができますか?

+0

あなたの実際の問題は何ですか?コード(あなたの抽象化、とにかく)は私によく見える –

+0

問題は、Web APIコントローラからデータを返す前にクライアントにデータを返す必要があることです。 –

答えて

1

お客様can notサーバーハブからクライアントデータを取得します。それはSignalRが欠けている機能です。

サーバはクライアント上でコマンドを呼び出すことができますが、応答を待つことはできませんので、Clients.Client("SomeConnectionId").getData()は何も返しません。クライアントだけがそれを行うことができます。

簡単なパスはありません。

public async Task<IHttpActionResult> Get() 
{ 
    Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager 
     .GetHubContext<Hubs.ConfigHub>() 
     .Clients.Client("SomeConnectionId") 
     .PleaseSendYourDataToTheHub(); 

    // don´t return anything and don´t await for results on the web client. 
    // The client just needs a 200 (ok) response to be sure the request 
    // is sent and going on. 
} 

クライアントがそのコマンド(PleaseSendYourDataToTheHub)のために、「聞く」、その後、ハブ内の対応するメソッドを呼び出します。これは私が状況を解決するために何をするのかです。あなたのような方法だろうあなたのハブで

public void OnClientData(DataType data) 
{ 
    // TODO find out the web client connection id 
    // send the data to the web client 
    Clients.Client("webClientConnectionId") 
     .DataFromClient(clientId, data); 
} 

を次に、Webクライアントでは、プロキシイベントに耳を傾けるだろうのような:

proxy.on('DataFromClient', function(clientId, data) { 
    // do something with the data 
}); 
+0

あなたの役に立つ答えをありがとう! –

関連する問題