Ao pesquisar a conta do Active Directory, System.Runtime.InteropServices.COMException: O limite de tempo para esta solicitação foi excedido

Ao pesquisar a conta do Active Directory, System.Runtime.InteropServices.COMException: O limite de tempo para esta solicitação foi excedido

Estou recebendo um erro ao procurar usuários LDAP no AD. Se eu restringir DirectorySearcher.SizeLimit = 1, estou obtendo o resultado (1 resultado retornado). Mas quando aumento SizeLimit para mais de 1 (SizeLimit = 2 também), recebo "o prazo para esta solicitação foi excedido"erro. Informe-me como posso depurar esse erro e quais são os possíveis cenários pelos quais recebo esse erro.

Observe também que o erro ocorre apenas quando meu DirectorySearcher.Filter possui ID, nome, e-mail. Se eu estiver pesquisando apenas por Nome, ID ou Email individualmente, não estou recebendo nenhum erro de tempo limite e estou obtendo resultados.

Filtre a pesquisa "a" com ID, nome e e-mail (isso gera um erro de tempo limite):

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

Filtre a pesquisa "a" com ID (isso funciona bem):

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

Obrigado

Responder1

Essa consulta não está bem formada e contém algumas informações redundantes e incorretas.

Eu especificaria objectCategory=person. E se você fizer isso, não precisará de objectClass=user, pois está incluído em objectCategory=person.

Você pode querer tentar isto:

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

Observe também:

"... se você tiver a opção de usar objectCategory e objectClass, é recomendável usar objectCategory. Isso ocorre porque objectCategory tem valor único e é indexado, enquanto objectClass tem vários valores e não é indexado (exceto no Windows Server 2008 e acima). Uma consulta usando um filtro com objectCategory será mais eficiente do que um filtro semelhante com objectClass. Os controladores de domínio do Windows Server 2008 (e superiores) têm um comportamento especial que indexa o atributo objectClass. controladores de domínio são o Windows Server 2008 ou se você especificar um controlador de domínio do Windows Server 2008 em sua 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

informação relacionada