接続エラーのトラブルシューティング
このセクションでは、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
このエラーは、ネゴシエート要求の間にも発生する可能性があります。
一般的な原因:
- アプリは、
Startup
でUseHttpsRedirection
を呼び出すことで、または 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 の接続が閉じられる場合があります。 サーバーは、閉じられた接続を、正常なクライアント切断として解釈する場合があります。 それらの場合にクライアントが切断されたさらに詳しい理由を取得するには、クライアントとサーバーからログを収集します。
その他のリソース
ASP.NET Core