Partilhar via


Resolver problemas de erros de ligação

Esta seção fornece ajuda com erros que podem ocorrer ao tentar estabelecer uma conexão com um hub 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 adesivas, a conexão pode começar 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 endpoint correto. Por exemplo, o servidor está 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 utilizar o ID e demorar demasiado para enviar uma solicitação ao servidor após a negociação, o servidor:

    • Exclui o ID.
    • Devolve 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 acontecer durante a solicitação de negociação.

Causa comum:

  • O aplicativo está configurado para impor HTTPS chamando UseHttpsRedirection em Startup, ou impõe HTTPS através da regra de reescrita de URL.

Solução possível:

  • Altere o 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 estado Http 0 - Geralmente um problema CORS e nenhum código de estado é 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).
  • Insira as origens esperadas em .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 Http 413 - Carga muito grande

Isso geralmente é causado por ter um token de acesso de tamanho superior a 4k.

  • Se estiver usando o Serviço do Azure SignalR , 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 SignalR conexão. O servidor pode interpretar a conexão fechada como uma desconexão de cliente normal. Para obter mais informações sobre por que um cliente se desconectou nesses casos, reúna logs do cliente e do servidor.

Recursos adicionais