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 aohttp://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
noStartup
ou 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.