An ADO.Net application is only sometimes able to connect to another server on the local network. It seems random whether a given connection attempt succeeds or fails. The connection is using a connection string in the form:
Server=THESERVERTheInstance;Database=TheDatabase;User Id=TheUser; Password=ThePassword;
the error returned is:
Connection Timeout Expired. The timeout period elapsed while attempting to consume the pre-login handshake acknowledgement.
This could be because the pre-login handshake failed or the server was unable to respond back in time.
The duration spent while attempting to connect to this server was - [Pre-Login] initialization=42030; handshake=0;
The .NET application is a small test app that executes the following code:
using (SqlConnection conn = new SqlConnection(cs))
using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM TheTable", conn))
{
conn.Open();
int rowCount = (int)cmd.ExecuteScalar();
}
TheTable is small, just 78 rows.
However, on the same machine where the .NET application receives this error, I am able to connect to THESERVER using SSMS and the User Id/Password named in the connection string.
Why might the connection fail from an ADO.Net app, but succeed with identical credentials from SSMS?
Question&Answers:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…