Beheben von Verbindungsproblemen

Dieser Abschnitt bietet Hilfe bei 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 fixierte Sitzungen 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. Beispielsweise wird der Server unter http://127.0.0.1:5000/hub/myHub gehostet, und der Client versucht, eine Verbindung mit http://127.0.0.1:5000/myHub herzustellen.

  • Wenn die Verbindung die ID verwendet und es zu lange dauert, eine Anforderung an den Server nach der Aushandlung zu senden, führt der Server folgendes aus:

    • Er löscht die ID.
    • Er gibt den Fehlercode 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 durch einen 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 Aushandlungsanforderung auftreten.

Übliche Ursache:

  • Die App ist so konfiguriert, dass HTTPS erzwungen wird, indem UseHttpsRedirection in Startup aufgerufen wird, oder HTTPS über die URL-Rewrite-Regel erzwungen 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 unzulässig

  • Für die App ist CORS nicht aktiviert.

Antwortcode 0

HTTP-Statuscode 0 – In der Regel ein CORS-Problem, es wird kein Statuscode 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 .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 Ihrer CORS-Richtlinie .AllowCredentials() hinzu. .AllowAnyOrigin() oder .WithOrigins("*") kann mit dieser Option nicht verwendet werden.

Antwortcode 413

HTTP-Statuscode 413 – Nutzdaten zu groß

Dies wird häufig durch ein Zugriffstoken mit einer Größe über 4.000 verursacht.

  • Wenn Sie Azure SignalR Service verwenden, verringern Sie die Tokengröße, indem Sie die Ansprüche wie folgt 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 interpretiert die geschlossene Verbindung möglicherweise als ordnungsgemäße Trennung der Clientverbindung. Weitere Informationen dazu, warum ein Client in diesen Fällen die Verbindung getrennt hat, erfassen Sie in Protokollen vom Client und Server.

Zusätzliche Ressourcen