При поиске учетной записи Active Directory System.Runtime.InteropServices.COMException: превышен лимит времени для этого запроса

При поиске учетной записи Active Directory System.Runtime.InteropServices.COMException: превышен лимит времени для этого запроса

Я получаю ошибку при поиске пользователей LDAP в AD. Если я ограничиваю DirectorySearcher.SizeLimit = 1, то я получаю результат (возвращен 1 результат). Но когда я увеличиваю SizeLimit до более чем 1 (SizeLimit также = 2), я получаю "срок для этого запроса был превышен" ошибка. Пожалуйста, дайте мне знать, как мне устранить эту ошибку и каковы возможные сценарии, из-за которых я получаю эту ошибку.

Также обратите внимание, что ошибка возникает только тогда, когда мой DirectorySearcher.Filter имеет ID, Name, Email. Если я ищу только по Name или ID или Email по отдельности, я не получаю никакой ошибки тайм-аута и получаю результаты.

Фильтр для поиска «a» с идентификатором, именем и адресом электронной почты (это приводит к ошибке тайм-аута):

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

Фильтр для поиска «a» с идентификатором (это работает хорошо):

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

Спасибо

решение1

Этот запрос неправильно сформирован и содержит избыточную и неверную информацию.

Я бы указал objectCategory=person. И если вы это сделаете, вам не понадобится objectClass=user, так как он включен в objectCategory=person.

Возможно, вам захочется попробовать это:

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

Также обратите внимание:

"...если у вас есть выбор между использованием objectCategory и objectClass, рекомендуется использовать objectCategory. Это связано с тем, что objectCategory является как однозначным, так и индексированным, в то время как objectClass является многозначным и не индексированным (за исключением Windows Server 2008 и более поздних версий). Запрос с использованием фильтра с objectCategory будет более эффективным, чем аналогичный фильтр с objectClass. Контроллеры домена Windows Server 2008 (и более поздние версии) имеют особое поведение, которое индексирует атрибут objectClass. Вы можете воспользоваться этим, если все ваши контроллеры домена являются Windows Server 2008 или если вы указали контроллер домена Windows Server 2008 в своем запросе. "

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

Связанный контент