Um aplicativo ADO.Net só às vezes é capaz de se conectar a outro servidor na rede local. Parece aleatório se uma determinada tentativa de conexão é bem-sucedida ou falha. A conexão está usando uma string de conexão no formato:
Servidor = THESERVER \ TheInstance; Banco de dados = TheDatabase; ID do usuário = TheUser; Senha = ThePassword;
o erro retornado é:
Tempo limite de conexão expirado. O período de tempo limite decorreu durante a tentativa de consumir a confirmação do handshake pré-login.
Isso pode acontecer porque o handshake pré-login falhou ou o servidor não conseguiu responder a tempo.
A duração gasta ao tentar se conectar a este servidor foi - [Pré-Login] inicialização = 42030; aperto de mão = 0;
O aplicativo .NET é um pequeno aplicativo de teste que executa o seguinte código:
using (SqlConnection conn = new SqlConnection(cs))
using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM TheTable", conn))
{
conn.Open();
int rowCount = (int)cmd.ExecuteScalar();
}
TheTable é pequena, apenas 78 linhas.
No entanto, na mesma máquina em que o aplicativo .NET recebe este erro, posso me conectar a THESERVER usando SSMS e a ID de usuário / senha nomeada na string de conexão.
Por que a conexão pode falhar de um aplicativo ADO.Net, mas ter sucesso com credenciais idênticas de SSMS?
fonte
Respostas:
Descobriu-se que o TCP / IP foi habilitado para o endereço IPv4, mas não para o endereço IPv6 de
THESERVER
.Aparentemente, algumas tentativas de conexão acabaram usando IPv4 e outras usando IPv6.
Habilitar TCP / IP para ambas as versões de IP resolveu o problema.
O fato de o SSMS ter funcionado acabou sendo uma coincidência (as primeiras tentativas provavelmente usaram IPv4). Algumas tentativas posteriores de conexão por meio do SSMS resultaram na mesma mensagem de erro.
Para habilitar TCP / IP para endereços IP adicionais:
fonte
Eu tive o mesmo erro que acabou de surgir, alinhado suspeitamente com a última rodada de atualizações da Microsoft (02/09/2016). Descobri que o SSMS se conectou sem problemas enquanto meu aplicativo ASP.NET retornou o erro de "tempo limite decorrido ao tentar consumir a confirmação do handshake pré-login"
A solução para mim foi adicionar um tempo limite de conexão de 30 segundos na string de conexão, por exemplo:
Na minha situação, a única conexão afetada foi aquela que estava usando Segurança integrada e eu estava representando um usuário antes de conectar, outras conexões para o mesmo servidor usando autenticação SQL funcionaram bem!
2 sistemas de teste (clientes separados e servidores Sql) foram afetados ao mesmo tempo, levando-me a suspeitar de uma atualização da Microsoft!
fonte
Resolvi o problema como Eric, mas com algumas outras mudanças:
E
fonte
Eu tive o mesmo problema, tentando conectar a um servidor em uma rede local (através de VPN) do Visual Studio, enquanto configurava um Modelo de Dados de Entidade.
Conseguido resolver apenas definindo
TransparentNetworkIPResolution=false
a string de conexão. No VS Add Connection Wizard, você pode encontrá-lo na guia Advanced.fonte
Eu tive o mesmo problema de handshake ao conectar-se a um servidor hospedado.
Abri minha rede e centro de compartilhamento e habilitei IPv6 em minha conexão de rede sem fio.
fonte
Meu executável que foi construído usando o .NET Framework 3.5 começou a relatar esses problemas de conexão em cerca de metade das vezes depois que algumas atualizações do Windows foram instaladas recentemente (semana de 7 de agosto de 2017).
Falhas de conexão foram causadas pelo .NET Framework 4.7 que foi instalado no computador de destino (a instalação automática do Windows Updates estava ativada) - https://support.microsoft.com/?kbid=3186539
A desinstalação do .NET Framework 4.7 resolveu problemas de conexão.
Aparentemente, há uma alteração significativa no .Net Framework 4.6.1 - TransparentNetworkIPResolution A atualização da string de conexão conforme o artigo também resolveu o problema sem a necessidade de reverter a versão do framework.
fonte
Corrigi esse erro no Windows Server 2012 e SQL Server 2012 habilitando o IPv6 e desbloqueando a porta de entrada 1433.
fonte
Em nosso caso, o problema ocorreu devido à configuração do cluster de disponibilidade. Para resolver esse problema, tivemos que definir
MultiSubnetFailover
como True na string de conexão.Mais detalhes no MSDN
fonte
Tive o mesmo problema, consegui resolver abrindo / habilitando a porta 1433 e tcp / ip no SQL Server Configuration Manager e depois reiniciei o servidor
fonte
No meu caso, acima de tudo, as opções já existiam.
Resolvido aumentando o tempo limite de conexão = 30.
fonte
Antes que você perca mais tempo resolvendo o problema, como eu, tente reiniciar sua máquina Windows . Funcionou para mim depois de aplicar todas as outras soluções.
fonte
Tive esse problema quando fiz uma migração do SharePoint 2010 para 2013. Suspeitei disso porque o servidor de banco de dados está do outro lado de um firewall que não roteia IP6 que estava tentando então usar IP6 e falhando na conexão com o banco de dados.
Acho que o problema agora está resolvido. Os erros parecem ter parado. O que fiz foi simplesmente desabilitar o IP6 (desmarcando-o) para o adaptador de rede nos servidores SharePoint.
fonte
Eu tive o mesmo problema, mas estava me conectando a um banco de dados remoto usando um endereço IP estático. Portanto, nenhuma das soluções acima resolveu meu problema.
Não consegui adicionar o mapeamento de usuário adequado para o login de segurança que estava usando, então a solução para mim foi simplesmente garantir que a configuração de mapeamento de usuário fosse definida para acessar meu banco de dados.
fonte
Resolvido esse problema, bloqueando / colocando endereços IP na lista negra que tentavam usar contas de usuário de força bruta. Verifique seus logs de acesso SQL para um grande número de tentativas de login malsucedidas (geralmente para a conta 'sa').
fonte
Para mim, descobri que o firewall do servidor Windows estava bloqueando a porta 1433, que é a porta padrão do servidor sql. Portanto, adicionar uma regra de entrada para aceitar essas conexões foi o truque para mim.
fonte
No meu caso, o parâmetro
Persist Security Info=true
com o usuário e a senha na string de conexão está causando o problema. Removendo o parâmetro ou conjunto parafalse
resolver o problema.fonte
Tente reiniciar o SQL Server simples antes de fazer algo drástico. Pode consertar. Fez por mim
fonte
Infelizmente, tive problemas com o SQL Server local instalado no Visual Studio e aqui muitas soluções não funcionaram para mim. Tudo que tenho que fazer é redefinir meu Visual Studio, indo para:
Painel de controle> Programa e recursos> Inicializador de configuração do Visual Studio
e clique no botão Mais e escolha Reparar
Depois disso, consegui acessar meu SQL Server local e trabalhar com bancos de dados SQL locais.
fonte
Eu tive o mesmo problema que foi resolvido automaticamente após a última atualização do Microsoft Windows, alguém teve o mesmo?
fonte
Eu tive o problema exato, tentei vários soultion não funcionou, finalmente reiniciei o sistema, ele funcionou bem.
fonte
Para rastrear o erro "Tempo limite de conexão expirado" , certifique-se de que:
fonte
Adicionando uma resposta aqui, apesar da resposta aceita anteriormente. Como meu cenário foi confirmado como DNS. Mais especificamente, um tempo limite de dns durante o handshake pré-login. Ao mudar de um nome DNS para um endereço IP (ou usando a entrada do arquivo Hosts), você contorna o problema. Embora ao custo de perder a resolução automática de ip.
Por exemplo, mesmo com o valor de tempo limite de uma string de conexão definido como 60 por um minuto completo, isso ainda aconteceria alguns segundos após a tentativa. O que nos leva a questionar por que o tempo limite seria excedido antes do período de tempo limite especificado? DNS.
fonte