Al buscar una cuenta de Active Directory, System.Runtime.InteropServices.COMException: se superó el límite de tiempo para esta solicitud

Al buscar una cuenta de Active Directory, System.Runtime.InteropServices.COMException: se superó el límite de tiempo para esta solicitud

Recibo un error cuando busco usuarios LDAP en AD. Si restrinjo DirectorySearcher.SizeLimit = 1, obtengo el resultado (se devuelve 1 resultado). Pero cuando aumento el SizeLimit a más de 1 (SizeLimit = 2 también), obtengo "se superó el plazo para esta solicitud"error. Déjeme saber cómo puedo depurar este error y cuáles son los posibles escenarios por los cuales aparece este error.

También tenga en cuenta que el error se produce sólo cuando mi DirectorySearcher.Filter tiene ID, nombre y correo electrónico. Si busco solo por nombre, ID o correo electrónico individualmente, no obtengo ningún error de tiempo de espera y obtengo resultados.

Filtre la búsqueda "a" con ID, nombre y correo electrónico (esto genera un error de tiempo de espera):

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

Filtrar para buscar "a" con ID (Esto funciona bien):

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

Gracias

Respuesta1

Esa consulta no está bien formada y tiene información redundante e incorrecta.

Yo especificaría objectCategory=persona. Y si haces eso, no necesitas objectClass=user, ya que está incluido en objectCategory=person.

Quizás quieras probar esto:

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

Tenga en cuenta también:

"...si puede elegir entre usar objectCategory y objectClass, se recomienda usar objectCategory. Esto se debe a que objectCategory tiene un solo valor y está indexado, mientras que objectClass tiene varios valores y no está indexado (excepto en Windows Server 2008 y arriba). Una consulta que utiliza un filtro con objectCategory será más eficiente que un filtro similar con objectClass. Los controladores de dominio de Windows Server 2008 (y superiores) tienen un comportamiento especial que indexa el atributo objectClass. Los controladores de dominio son Windows Server 2008, o si especifica un controlador de dominio de Windows Server 2008 en su consulta ".

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

información relacionada