接続エラーのトラブルシューティング

このセクションでは、ASP.NET Core SignalR ハブへの接続を確立しようとしたときに発生する可能性があるエラーについて説明します。

応答コード 404

WebSocket と skipNegotiation = true を使用しているとき

WebSocket connection to 'wss://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 404
  • 固定セッションを使用せずに複数のサーバーを使用する場合は、1 台のサーバーで接続を開始してから、別のサーバーに切り替えることができます。 他のサーバーは、以前の接続を認識していません。

  • クライアントが正しいエンドポイントに接続していることを確認します。 たとえば、サーバーが http://127.0.0.1:5000/hub/myHub でホストされ、クライアントが http://127.0.0.1:5000/myHub に接続しようとしているとします。

  • 接続で ID が使用され、ネゴシエーションの後でサーバーに要求を送信するまで時間がかかりすぎた場合、サーバーは次のようになります。

    • ID を削除します。
    • 404 を返します。

応答コード 400 または 503

次のエラーが発生した場合:

WebSocket connection to 'wss://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 400

Error: Failed to start the connection: Error: There was an error with the transport.

このエラーは、通常、クライアントで WebSocket トランスポートのみが使われているのに、サーバーで WebSocket プロトコルが有効になっていない場合に発生します。

応答コード 307

WebSocket と skipNegotiation = true を使用しているとき

WebSocket connection to 'ws://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 307

このエラーは、ネゴシエート要求の間にも発生する可能性があります。

一般的な原因:

  • アプリは、StartupUseHttpsRedirection を呼び出すことで、または URL 書き換えルールを使用してして、 HTTPS を強制するように構成されています。

考えられる解決策:

  • クライアント側の URL を "http" から "https" に変更します。 .withUrl("https://xxx/HubName")

応答コード 405

Http 状態コード 405 - メソッドを使用できません

  • アプリで CORS が有効になっていません

応答コード 0

Http 状態コード 0 - 通常は CORS の問題で、状態コードはありません

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:5000/default/negotiate?negotiateVersion=1. (Reason: CORS header 'Access-Control-Allow-Origin' missing).
  • 予想されるオリジンを .WithOrigins(...) に追加します
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:5000/default/negotiate?negotiateVersion=1. (Reason: expected 'true' in CORS header 'Access-Control-Allow-Credentials').
  • .AllowCredentials() を CORS ポリシーに追加します。 .AllowAnyOrigin() または .WithOrigins("*") をこのオプションで使用することはできません

応答コード 413

Http 状態コード 413 - ペイロードが大きすぎます

これは、多くの場合、アクセス トークンが 4k を超えていることが原因です。

  • Azure SignalR サービスを使用している場合は、サービスで送信されるクレームを次のようにカスタマイズすることで、トークンのサイズを減らします。
.AddAzureSignalR(options =>
{
    options.ClaimsProvider = context => context.User.Claims;
});

一時的なネットワーク エラー

一時的なネットワーク エラーで、SignalR の接続が閉じられる場合があります。 サーバーは、閉じられた接続を、正常なクライアント切断として解釈する場合があります。 それらの場合にクライアントが切断されたさらに詳しい理由を取得するには、クライアントとサーバーからログを収集します

その他のリソース