Compartir a través de


Solución de problemas de conexión

En esta sección se proporciona ayuda con errores que pueden ocurrir al intentar establecer una conexión a un hub de ASP.NET Core SignalR.

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.

  • Compruebe 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 identificador y tarda demasiado tiempo en enviar una solicitud al servidor después de la negociación, el servidor:

    • Elimina el identificador.
    • Devuelve un error 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 llamando a UseHttpsRedirection en Startup, o mediante una regla de reescritura de URL para exigir HTTPS.

Solución posible:

  • Cambie 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 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).
  • Añade 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').
  • Agregue .AllowCredentials() a la política 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 que supera los 4k caracteres.

  • Si usa el Servicio de Azure SignalR, reduzca el tamaño del token personalizando las reivindicaciones 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 SignalR conexión. El servidor puede interpretar la conexión cerrada como una desconexión de cliente normal. Para obtener más información sobre por qué un cliente desconectado en esos casos recopila registros del cliente y el servidor.

Recursos adicionales