Я получаю сообщение об ошибке при поиске пользователей 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