ADO.Netアプリケーションは、ローカルネットワーク上の別のサーバーに接続できる場合があります。特定の接続試行が成功するか失敗するかはランダムに見えます。接続は次の形式の接続文字列を使用しています。
サーバー= THESERVER \ TheInstance;データベース= TheDatabase;ユーザーID = TheUser; Password = ThePassword;
返されるエラーは次のとおりです。
接続タイムアウトの期限が切れました。ログイン前のハンドシェイクの確認応答を消費しようとしたときにタイムアウト期間が経過しました。
これは、ログイン前のハンドシェイクが失敗したか、サーバーが時間内に応答できなかったことが原因である可能性があります。
このサーバーへの接続試行中に費やされた時間は-[Pre-Login] initialization = 42030;でした。handshake = 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();
}
テーブルは小さく、わずか78行です。
ただし、.NETアプリケーションがこのエラーを受け取るのと同じマシンで、SSMSと接続文字列で指定されたユーザーID /パスワードを使用してTHESERVERに接続できます。
ADO.Netアプリからの接続が失敗し、SSMSからの同じ資格情報で成功するのはなぜですか?