2

サーバーに接続します。サーバーは、エイリアスが01と02の2つのサーバーを指すように負荷分散されており、引数のために接続をラウンドロビンします。問題なくハブに接続でき、サーバーにデータを送信することもできますが、クライアントに返されるときに、メソッドが呼び出されることはありません。ロードバランサーをバイパスしてサーバー名を明示的に使用すると、常に正常に機能します。

私はそれをトレースしていて、Clients.Client(clientId).completeJob(stuff)を使用して正確な発信元サーバーからメッセージを送り返します。これはサーバー上で正常に実行されますが、ContinueWithを実行すると、メッセージが終了しません。

ああ、それはサーバー送信イベントに接続されています。私は何かが足りないのですか、それともこれはサポートされていないだけですか?

4

1 に答える 1

0

サーバー送信イベントは長時間実行される接続を確立しますが、WebSocketとは異なり、双方向ではありません。この接続は、データをクライアントにプッシュするためにのみ使用できます。

SignalRは、WebSocketトランスポートが利用できない場合、通常のXHRを使用してクライアントからデータを送信します。これは、ロードバランサーが、クライアントからサーバーへのハブメソッドの呼び出しを、クライアントがサーバー送信イベント接続を最初に確立したサーバーとは異なるサーバーにルーティングする可能性が高いことを意味します。

実行中のサーバーClients.Client(clientId).completeJob(stuff)は、指定されたクライアントにメッセージをプッシュできる接続を所有していない可能性があります。(ただし、サーバー上のハブメソッドから値を返すと、メソッドを呼び出したのと同じ接続を介してデータがクライアントに返送されます。)

SignalRは、ロードバランサーの背後で機能します。すべてのSignalRサーバーがServiceBusやRedisなどのバックプレーンを介して相互に通信できるように、もう少しセットアップが必要です。これにより、サーバーからクライアントへの接続を所有するサーバーにメッセージをディスパッチできます。

https://github.com/SignalR/SignalR/wiki/Azure-service-busで、AzureでServiceBusバックプレーンをセットアップする方法について詳しく説明しています。

于 2013-02-14T09:14:04.590 に答える