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 a http://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 en Startup, 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.

Recursos adicionales