ADO.Netアプリケーションは、ローカルネットワーク上の別のサーバーに接続できる場合があります。特定の接続試行が成功するか失敗するかはランダムに見えます。接続は、次の形式の接続文字列を使用しています。
Server = THESERVER \ TheInstance; Database = TheDatabase; User Id = TheUser; Password = ThePassword;
返されるエラーは次のとおりです。
接続タイムアウトが期限切れになりました。ログイン前のハンドシェイク確認応答を消費しようとしたときにタイムアウト期間が経過しました。
これは、ログイン前のハンドシェイクが失敗したか、サーバーが時間内に応答できなかったことが原因である可能性があります。
このサーバーへの接続を試行している間に費やされた時間は-[ログイン前]初期化=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からの同一の資格情報で成功するのはなぜですか?