Freigeben über


Beheben von Verbindungsproblemen

Dieser Abschnitt enthält Hilfe zu Fehlern, die beim Herstellen einer Verbindung mit einem ASP.NET Core SignalR Hub auftreten können.

Antwortcode 404

Bei Verwendung von WebSockets und skipNegotiation = true

WebSocket connection to 'wss://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 404
  • Wenn Sie mehrere Server ohne Sticky Sessions verwenden, kann die Verbindung auf einem Server beginnen und dann zu einem anderen Server wechseln. Der andere Server kennt die vorherige Verbindung nicht.

  • Stellen Sie sicher, dass der Client eine Verbindung mit dem richtigen Endpunkt herstellt. Der Server wird zum Beispiel bei http://127.0.0.1:5000/hub/myHub gehostet und der Client versucht, eine Verbindung bei http://127.0.0.1:5000/myHub herzustellen.

  • Wenn die Verbindung die ID verwendet und es nach dem Aushandeln zu lange dauert, eine Anforderung an den Server zu senden, reagiert der Server folgendermaßen:

    • Löscht die ID.
    • Gibt einen HTTP-Fehler 404 zurück.

Antwortcode 400 oder 503

Für den folgenden Fehler:

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.

Dieser Fehler wird in der Regel von einem Client verursacht, der nur den WebSockets-Transport verwendet, aber das WebSocket-Protokoll ist auf dem Server nicht aktiviert.

Antwortcode 307

Bei Verwendung von WebSockets und skipNegotiation = true

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

Dieser Fehler kann auch während der Verhandlungsanfrage auftreten.

Häufige Ursache:

  • Die App ist so konfiguriert, dass HTTPS durch Aufrufen von UseHttpsRedirection in Startup oder durch Erzwingen von HTTPS über die URL-Neuschreibregel sichergestellt wird.

Mögliche Lösung:

  • Ändern Sie die URL auf der Clientseite von "http" in "https". .withUrl("https://xxx/HubName")

Antwortcode 405

HTTP-Statuscode 405 – Methode nicht zulässig

  • Die App verfügt nicht über CORS aktiviert

Antwortcode 0

HTTP-Statuscode 0 – In der Regel wird ein CORS-Problem ausgegeben, kein Statuscode wird angegeben.

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).
  • Fügen Sie die erwarteten Ursprünge zu .WithOrigins(...) hinzu
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').
  • Fügen Sie .AllowCredentials() Ihrer CORS-Richtlinie hinzu. .AllowAnyOrigin() oder .WithOrigins("*") kann nicht mit dieser Option verwendet werden.

Antwortcode 413

Http-Statuscode 413 – Nutzlast zu groß

Diese wird häufig durch ein Zugriffstoken verursacht, das größer als 4.000 Byte ist.

  • Wenn Sie den Azure-Dienst SignalR verwenden, verringern Sie die Tokengröße, indem Sie die Ansprüche anpassen, die über den Dienst gesendet werden:
.AddAzureSignalR(options =>
{
    options.ClaimsProvider = context => context.User.Claims;
});

Vorübergehende Netzwerkfehler

Vorübergehende Netzwerkfehler können die SignalR Verbindung schließen. Der Server könnte die geschlossene Verbindung als einen reibungslosen Client-Disconnect interpretieren. Um mehr Informationen darüber zu erhalten, warum ein Client in diesen Fällen getrennt wurde, sammeln Sie Protokolle vom Client und Server.

Weitere Ressourcen