私のアプリケーションに誰かをログインさせるために、長い間正常に動作しているコードがいくつかあります。
private Employee Authenticate(string userName, string password) {
DirectorySearcher search = new DirectorySearcher(_rootDirectory);
search.Filter = "(&(objectClass=user)(SAMAccountName=" + userName + "))";
try {
SearchResultCollection results = search.FindAll();
if (0 < results.Count) {
// the rest of my code
// that returns an employee
// if the password matches
}
} catch (Exception err) {
MessageBox.Show(err.Message, "ActiveDir.cs ADWrapper::AuthenticateUser Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return null;
}
最近、値をテストするとすぐにコードがCOMExceptionをスローしていました ( SearchResultCollectionは null ではありません)。results.Count
Microsoft のドキュメントは、Countが何らかの種類の例外をスローする必要があることを示していません。
コードをデバッグするとき、上記の条件にブレーク ポイントを置き、マウスをその上に置くと、例外が存在することを確認できます。
デバッガーに条件を表示F10させcatch
たり、ブレークポイントで数秒間待機させたりすると、results.Count
変数が有効になり、整数値が含まれます。
FindAllメソッドがスレッドで実行されており、スレッドが完了する前に結果を確認していると推測しています。
がいつ終了したか、またはActive Directoryの更新FindAll()
の結果として発生したある種の新しいバグを発見したかを知る方法はありますか?