Compartilhar via


Solucionar erros de conexão

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

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 persistentes, a conexão pode iniciar em um servidor e alternar para outro servidor. O outro servidor não está ciente da conexão anterior.

  • Verifique se o cliente está se conectando ao endpoint correto. Por exemplo, o servidor é hospedado em http://127.0.0.1:5000/hub/myHub e o cliente está tentando se conectar a 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 o processo de negociação, o servidor:

    • Exclui o identificador.
    • Retorna um erro 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 usando 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 em Startup, ou impondo HTTPS por meio da regra de reescrita de URL.

Possível solução:

  • Altere a URL do 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 CORS habilitado

Código de resposta 0

Código de status http 0 – Geralmente um problema de CORS , nenhum código de status é dado

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() à política do CORS. Não é possível usar .AllowAnyOrigin() ou .WithOrigins("*") com essa opção

Código de resposta 413

Código de status http 413 – Carga muito grande

Isso geralmente é causado pelo uso de um token de acesso com mais de 4 mil caracteres.

  • Se estiver usando o Serviço do Azure SignalR , reduza o tamanho do token personalizando as declarações 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 SignalR conexão. 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 desconectado nesses casos coleta logs do cliente e do servidor.

Recursos adicionais