4

実行中のインスタンスを 1 つから 3 つに移行して、Azure クラウド サービスのスケールアウト機能をテストしています。クライアント サーバー接続には、Standard_A2 ノード、WorkerRole、および SignalR を使用しています。

これを実行すると、すべての受信 SignalR 接続で 400 "Bad Request" HTTP エラーが返されます。単一のインスタンスに戻すと問題が解消され、クライアントとサーバーのやり取りが再び正常に機能するようになるため、スケーリングが問題の原因であることは間違いありません。エラーは次のとおりです。

Microsoft.AspNet.SignalR.Client.HttpClientException: StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Transfer-Encoding: chunked
Server: Microsoft-HTTPAPI/2.0
{
Transfer-Encoding: chunked
Server: Microsoft-HTTPAPI/2.0
X-Content-Type-Options: nosniff
Date: Wed, 24 Dec 2014 09:16:32 GMT
}
  at Microsoft.AspNet.SignalR.Client.Http.DefaultHttpClient+<>c__DisplayClass6.<Post>b__5 (System.Net.Http.HttpResponseMessage responseMessage) [0x00000] in <filename unknown>:0 
  at Microsoft.AspNet.SignalR.TaskAsyncHelper+<>c__DisplayClass19`2[T,TResult].<Then>b__17 (System.Threading.Tasks.Task`1 t) [0x00000] in <filename unknown>:0 
  at Microsoft.AspNet.SignalR.TaskAsyncHelper+TaskRunners`2+<>c__DisplayClass3a[System.Net.Http.HttpResponseMessage,Microsoft.AspNet.SignalR.Client.Http.IResponse].<RunTask>b__39 (System.Threading.Tasks.Task`1 t) [0x00000] in <filename unknown>:0

これらのエラーの ResponseBody を ( を使用してHttpClientExpection.GetError().ResponseBody) 調べたところ、「ConnectionId の形式が正しくありません。」が返されることが確認できました。これは、実行中の 3 つのインスタンス間で machineKey が同じでないために問題が発生したことを示しています (たとえば、F5 の背後にある Redis バックプレーンを使用する SignalR - StatusCode: 400、ReasonPhrase: 'Bad Request' を参照)。

次のように、構成ファイル (system.web 内) に machineKey 要素を追加し、再デプロイしました。

<machineKey validationKey="FIRST_KEY"  
        decryptionKey="SECOND_KEY" 
        validation="SHA1" decryption="Auto" />

サーバーからの応答に変化はありませんでした。も設定してみdecryption="AES"ました。変化なし。

広範な検索にもかかわらず、単一の machineKey を使用してデプロイする方法に関する明確なガイドラインはないようです。私の最善の次のステップは何ですか?それとも、完全に間違った方向に進んでいますか?

4

0 に答える 0