Solucionar erros de conexão

Esta seção fornece ajuda com erros que podem ocorrer ao tentar estabelecer uma conexão com um hub SignalR ASP.NET Core.

Código de resposta 404

Ao usar WebSockets e skipNegotiation = true

WebSocket connection to 'wss://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 404
  • Ao usar vários servidores sem sessões autoadesivas, a conexão pode iniciar em um servidor e, em seguida, alternar para outro servidor. O outro servidor não está ciente da conexão anterior.

  • Verifique se o cliente está se conectando ao ponto de extremidade correto. Por exemplo, o servidor é hospedado em http://127.0.0.1:5000/hub/myHub e o cliente está tentando se conectar ao http://127.0.0.1:5000/myHub.

  • Se a conexão usar a ID e demorar muito para enviar uma solicitação ao servidor após a negociação, o servidor:

    • Exclui a ID.
    • Retorna um 404.

Código de resposta 400 ou 503

Para o seguinte erro:

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.

Esse erro geralmente é causado por um cliente que usa apenas o transporte WebSockets, mas o protocolo WebSocket não está habilitado no servidor.

Código de resposta 307

Ao usar WebSockets e skipNegotiation = true

WebSocket connection to 'ws://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 307

Esse erro também pode ocorrer durante a solicitação de negociação.

Causa comum:

  • O aplicativo é configurado para impor HTTPS chamando UseHttpsRedirection no Startupou impõe HTTPS por meio da regra de reescrita de URL.

Solução possível:

  • Altere a URL no lado do cliente de "http" para "https". .withUrl("https://xxx/HubName")

Código de resposta 405

Código de status http 405 – Método não permitido

  • O aplicativo não tem o CORS habilitado

Código de resposta 0

Código de status 0 – Geralmente um problema de CORS. Nenhum código de status é fornecido

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).
  • Adicionar as origens esperadas 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').
  • Adicione .AllowCredentials() à sua política de CORS. Não é possível usar .AllowAnyOrigin() ou .WithOrigins("*") com esta opção

Código de resposta 413

Código de status 413 – Conteúdo muito grande

Isso geralmente é causado por ter um token de acesso com mais de 4k.

  • Se estiver usando o Serviço SignalR do Azure, reduza o tamanho do token personalizando as declarações que estão sendo enviadas por meio do Serviço com:
.AddAzureSignalR(options =>
{
    options.ClaimsProvider = context => context.User.Claims;
});

Falhas de rede transitórias

Falhas de rede transitórias podem fechar a conexão SignalR. O servidor pode interpretar a conexão fechada como uma desconexão normal do cliente. Para obter mais informações sobre por que um cliente se desconectou nesses casos colete logs do cliente e do servidor.

Recursos adicionais