2012-04-16 7 views
8

異なるクライアントから同時に複数の要求が発生した場合、ハンドラの実行中にHub.Context.ConnectionIdの値が変更されます。SignalRはHub.Contextスレッドセーフですか?

私はクライアントIDがAとBに接続されている2つのクライアントがあり、私はfoo()というハブのメソッドを持っていると言います。 Aからの要求をfoo()を呼び出すサーバに送信し、Aからの要求が処理されている間、私はBからfoo()を呼び出す要求を送信します。 Aの要求の処理の開始時に、Hub.Context.ConnectionId == Aが呼び出されますが、メソッド呼び出しの最後にHub.Context.ConnectionId == B.

Hub.Contextをコピーする必要がありますか?私はこれをいつどのように行うべきですか?

答えて

7

ハブインスタンスが静的でないため、何もコピーする必要がないため、スレッドセーフでなくてもかまいません。

コールごとに作成されます。したがって、クライアントからの各呼び出しは新しいHubインスタンスとHubContextを作成します。

+0

ありがとう、私はIHubActivatorから同じハブを返していましたが、毎回新しいハブを返すように変更しました。 –

0

これはあなたの質問に直接答えるものではありませんが、私の通常のワークフローは、最初に接続したときに発信者に値を設定することです。

Caller.clientId = Guid.NewGuid(); 
関連する問題