Solución de problemas de conexión
En esta sección se proporciona ayuda con errores que pueden producirse al intentar establecer una conexión a un centro de SignalR de ASP.NET Core.
Código de respuesta 404
Al usar WebSockets y skipNegotiation = true
WebSocket connection to 'wss://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 404
Cuando se usan varios servidores sin sesiones permanentes, la conexión se puede iniciar en un servidor y, a continuación, cambiar a otro servidor. El otro servidor no es consciente de la conexión anterior.
Comprobar que el cliente se está conectando al punto de conexión correcto. Por ejemplo, el servidor se hospeda en
http://127.0.0.1:5000/hub/myHub
y el cliente intenta conectarse ahttp://127.0.0.1:5000/myHub
.Si la conexión usa el id. y tarda demasiado tiempo en enviar una solicitud al servidor después de la negociación, el servidor:
- Eliminar el id.
- Devuelve un valor 404.
Código de respuesta 400 o 503
Para el siguiente error:
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.
Este error suele deberse a que un cliente usa solo el transporte de WebSockets, pero el protocolo WebSocket no está habilitado en el servidor.
Código de respuesta 307
Al usar WebSockets y skipNegotiation = true
WebSocket connection to 'ws://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 307
Este error también puede producirse durante la solicitud de negociación.
Causa común:
- La aplicación está configurada para aplicar HTTPS mediante una llamada a
UseHttpsRedirection
enStartup
, o aplica HTTPS a través de la regla de reescritura de URL.
Solución posible:
- Cambiar la dirección URL del lado cliente de "http" a "https".
.withUrl("https://xxx/HubName")
Código de respuesta 405
Código de estado HTTP 405: método no permitido
- La aplicación no tiene CORS habilitado
Código de respuesta 0
Código de estado HTTP 0: normalmente es un problema de CORS, no se da ningún código de estado
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).
- Agregar los orígenes esperados a
.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').
- Agregar
.AllowCredentials()
a la directiva de CORS. No se puede usar.AllowAnyOrigin()
o.WithOrigins("*")
con esta opción
Código de respuesta 413
Código de estado HTTP 413: carga demasiado grande
Esto suele deberse a tener un token de acceso superior a 4k.
- Si usa el servicio de SignalR de Azure, reduzca el tamaño del token personalizando las notificaciones que se envían a través del servicio con:
.AddAzureSignalR(options =>
{
options.ClaimsProvider = context => context.User.Claims;
});
Errores de red transitorios
Los errores de red transitorios pueden cerrar la conexión de SignalR. El servidor puede interpretar la conexión cerrada como una desconexión de cliente correcta. Para obtener más información sobre por qué un cliente se desconectó en esos casos recopilar registros del cliente y el servidor.