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 mithttp://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
inStartup
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.