Назад | Перейти на главную страницу

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

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

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

Фильтр для поиска «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*))
)

Спасибо

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

Я бы указал 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 имеет однозначное значение и индексируется, а объектный класс - многозначный и не индексируется (кроме 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