ADO.Net 应用程序有时只能连接到本地网络上的另一台服务器。给定的连接尝试是成功还是失败似乎是随机的。该连接使用以下形式的连接字符串:
服务器=THESERVER\TheInstance;数据库=TheDatabase;用户ID=TheUser;密码=密码;
返回的错误是:
连接超时已过期。尝试使用登录前握手确认时超时时间已过。
这可能是因为登录前握手失败或服务器无法及时响应。
尝试连接到此服务器所花费的持续时间是 - [登录前] 初始化 = 42030;握手=0;
.NET 应用程序是一个小型测试应用程序,它执行以下代码:
using (SqlConnection conn = new SqlConnection(cs))
using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM TheTable", conn))
{
conn.Open();
int rowCount = (int)cmd.ExecuteScalar();
}
TheTable很小,只有 78 行。
但是,在 .NET 应用程序收到此错误的同一台机器上,我可以使用 SSMS 和连接字符串中命名的用户 ID/密码连接到 THESERVER。
为什么 ADO.Net 应用程序的连接可能会失败,但使用来自 SSMS 的相同凭据会成功?