Beim Durchsuchen des Active Directory-Kontos tritt System.Runtime.InteropServices.COMException auf: Das Zeitlimit für diese Anfrage wurde überschritten

Beim Durchsuchen des Active Directory-Kontos tritt System.Runtime.InteropServices.COMException auf: Das Zeitlimit für diese Anfrage wurde überschritten

Ich erhalte eine Fehlermeldung, wenn ich in AD nach LDAP-Benutzern suche. Wenn ich DirectorySearcher.SizeLimit = 1 einschränke, erhalte ich das Ergebnis (1 Ergebnis zurückgegeben). Aber wenn ich SizeLimit auf mehr als 1 erhöhe (SizeLimit auch = 2), erhalte ich „die Frist für diese Anfrage wurde überschritten"-Fehler. Bitte lassen Sie mich wissen, wie ich diesen Fehler debuggen kann und welche möglichen Szenarien es gibt, aufgrund derer dieser Fehler auftritt.

Beachten Sie auch, dass der Fehler nur auftritt, wenn mein DirectorySearcher.Filter ID, Name und E-Mail enthält. Wenn ich nur nach Name, ID oder E-Mail einzeln suche, erhalte ich keinen Timeout-Fehler und erhalte Ergebnisse.

Filter für Suche „a“ mit ID, Name und E-Mail (dies löst einen Timeout-Fehler aus):

(|
  (&(|(objectClass=person)(objectCategory=user))(!objectCategory=computer)((|(samAccountname=a*)(givenname=a*)(mail=a*))))
  (&(|(objectCategory=group)(objectClass=groupOfUniqueNames)(objectClass=groupOfNames))(!objectCategory=computer)(cn=a*))
)

Filter für Suche "a" mit ID (Das funktioniert gut):

(|
  (&(|(objectClass=person)(objectCategory=user))(!objectCategory=computer)(samAccountname=a*))
  (&(|(objectCategory=group)(objectClass=groupOfUniqueNames)(objectClass=groupOfNames))(!objectCategory=computer)(cn=a*))
)

Danke

Antwort1

Diese Abfrage ist nicht gut formuliert und enthält einige redundante und falsche Informationen.

Ich würde objectCategory=person angeben. Und wenn Sie das tun, brauchen Sie objectClass=user nicht, da es in objectCategory=person enthalten ist.

Vielleicht möchten Sie Folgendes versuchen:

(|
  (&(objectCategory=person)(|(samAccountname=a*)(givenname=a*)(mail=a*)))
  (&(|(objectCategory=group)(objectClass=groupOfUniqueNames)(objectClass=groupOfNames))(cn=a*))
)

Beachten Sie außerdem:

"...wenn Sie die Wahl zwischen objectCategory und objectClass haben, wird empfohlen, objectCategory zu verwenden. Das liegt daran, dass objectCategory sowohl einwertig als auch indiziert ist, während objectClass mehrwertig und nicht indiziert ist (außer unter Windows Server 2008 und höher). Eine Abfrage mit einem Filter mit objectCategory ist effizienter als ein ähnlicher Filter mit objectClass. Domänencontroller unter Windows Server 2008 (und höher) weisen ein spezielles Verhalten auf, das das objectClass-Attribut indiziert. Sie können dies nutzen, wenn alle Ihre Domänencontroller Windows Server 2008 sind oder wenn Sie in Ihrer Abfrage einen Domänencontroller unter Windows Server 2008 angeben."

http://social.technet.microsoft.com/wiki/contents/articles/5392.active-directory-ldap-syntax-filters.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/ms677612%28v=vs.85%29.aspx

verwandte Informationen