2

クライアントにメッセージをプッシュしたり、クライアントからサーバーにメッセージを戻したりする SignalR を使用して、かなり遠くまで到達することができました。

私ができるようにしたいのは、これは単にSignalRが処理できないことかもしれません...応答を呼び出すことです。

SignalR は呼び出しからの応答を許可しますか? その場合、クライアントにリクエストを送信して、最初のレスポンスのみを使用できますか?

HubResponse と task.result への参照を見ましたが、ハブ メソッドがクライアントから値を返す方法がよくわかりません。

私はそれをかなりいじり、AggregateExceptionを取得するか、からTask<Object>への無効なキャストを取得しましたTask<MyType>

4

1 に答える 1

1

接続されたクライアントはブロードキャストのみです。つまり、サーバーはそれらを直接要求することはできません。したがって、あるクライアントが他の誰かが要求を満たすように要求できる Hub メソッドを用意する必要があります。ハブはその要求を接続されているすべてのクライアントにブロードキャストし、最初に応答したクライアントを元のクライアントにブロードキャストできます。リクエスト/レスポンスを適切なオーディエンスに送信するには、ハブで独自の状態を維持する必要があります。また、最初の回答を受け取ったらすぐに、他のすべてのクライアントに、質問に答えるのをやめたりやめたりしないように伝えたいと思うでしょう.

これ以上の詳細なしに、これの正確なアーキテクチャを処方できるかどうかはわかりません。まず、どのクライアントも要求に応答できる必要がありますか、それともクライアントを分類しますか? クライアントを分類できる場合は、グループを使用してクライアントにとって意味のあるリクエストのみをブロードキャストすることができます。次に、基本的に、質問できるすべての質問のインターフェイスを定義しようとしていますか、それとも、時間の経過とともにハブを変更せずにセットを拡張できるようにしたいですか? これにより、厳密に型指定された Hub メソッドを使用しているか、何らかのジェネリックを使用するかが決まりますAskQuestion(string questionId)。前者の場合、おそらく前述のようにグループを使用せず、代わりにリクエスト カテゴリごとに別個のハブをセットアップするだけです。

于 2012-07-10T17:22:48.683 に答える