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?