2016-04-05 17 views
1

Ich habe über einige Code kommen, die die DirectorySearcher.FindOne() Methode mit den folgenden Eigenschaften verwendet:DirectorySearcher.FindOne() nicht konsistent?

search.Filter = "(&(objectClass=user)(anr=" + userNameNoDomain + "))"; 
search.PropertiesToLoad.Add("mail"); 
SearchResult result = search.FindOne(); 

Es gibt einige Benutzer, die zwei Konten im Zusammenhang mit ihrem Benutzernamen haben, und jedes Konto hat eine andere E-Mail-Adresse. Die Dokumentation besagt:

Wenn mehr als ein Eintrag während der Suche gefunden wird, wird nur der erste Eintrag zurückgegeben.

Es scheint jedoch, dass manchmal dieser Aufruf das erste Konto zurückgibt, und manchmal wird es das zweite Konto zurückgeben. Von dem, was ich sagen kann, scheint der Code, der in einer Umgebung ist, immer den ersten Datensatz zurückzugeben, und der Code in einer anderen Umgebung scheint immer den zweiten Datensatz zurückzugeben. Mein Verständnis ist, dass der Code in beiden Umgebungen derselbe ist, und beide den gleichen AD abfragen (vermutlich mit demselben Benutzer angemeldet, aber ich muss dies bestätigen).

Meine Fragen sind, ist es möglich für die FindOne() Methode, ein anderes Konto in nachfolgenden Aufrufen zurückzugeben? Gibt es eine Möglichkeit, was passiert, wenn die beiden Umgebungen den gleichen Code haben und denselben AD als denselben Benutzer aufrufen?

Meine ursprüngliche Annahme ist, dass irgendwo etwas anders sein muss, aber ich möchte die Möglichkeit ausschließen, dass FindOne() verschiedene Konten in diesem Szenario zurückgeben kann, bevor ich in ein Kaninchenloch gehe.

Hinweis: Ich weiß, ich kann nur den Code ändern FindAll() zu verwenden und dann durch beide Konten durchlaufen und die richtige wählen, aber ich möchte verstehen, warum Ich habe, dies zu tun, bevor ich machen, dass Veränderung. Wenn die Untersuchung dazu führt, dass ich irgendwo einen Unterschied entdecke, muss ich den Code vielleicht gar nicht ändern.

Antwort

1

Es ist nicht Ihr Code, es ist AD, das Ergebnis zu wählen, um zurückzukehren. Es gibt keine Garantie für die Reihenfolge der Ergebnisse, die Sie aus dem Verzeichnis erhalten. Wenn Sie zwei verschiedene DCs treffen und die Ergebnisse in einer anderen Reihenfolge zurück erhalten, ist dies wahrscheinlich das, was Sie hier sehen.

+0

Ausgezeichneter Punkt. Es gibt mehrere DCs. Ich benutze FindAll() und nehme den, den ich brauche. – TTT

Verwandte Themen