свойства, загружаемые в кэш. Свойствами по умолчанию, которые мы получаем, если ничего не определено, являются Path
и Name
для объекта.
SearchScope
является перечислением, которое определяет, как глубоко должен распространяться поиск:
□ SearchScope.Base
ищет атрибуты только в том объекте, где начинается поиск, поэтому мы получаем максимум один объект.
□ Для SearchScope.OneLevel
поиск продолжается в коллекции-потомке базового объекта. Сам базовый объект для поиска не используется.
□ SearchScope.Subtree
определяет, что поиск должен спускаться вниз по всему дереву.
По умолчанию для SearchScope
используется Subtree
.
Пределы поиска
Такой поиск может охватывать несколько доменов. Чтобы ограничить поиск некоторым числом объектов или требуемым временем, необходимо определить несколько дополнительных свойств.
Свойства DirectorySearcher | Описание |
---|---|
ClientTimeout | Максимальное время, в течение которого клиент ожидает, что сервер вернет результат. Если сервер не отвечает, то никаких записей не возвращается. |
PageSize | При постраничном поиске сервер возвращает число объектов, определенных с помощью PageSize , а не весь результат. Это сокращает и время клиента для получения первого ответа, и необходимую память. Сервер посылает клиенту cookie, которое отправляется назад на сервер с запросом следующего поиска, чтобы поиск можно было продолжить в точке, где он закончился. |
ServerPageTimeLimit | Это значение определяет время для постраничного поиска, чтобы вернуть число объектов, которое определено значением PageSize . Если время истекает до достижения значения PageSize , найденные до этого момента объекты возвращаются клиенту. Значение по умолчанию равно -1, что означает бесконечность. |
ServerTimeLimit | Определяет максимальное время, в течение которого сервер будет искать объекты. Когда это время истекает, все найденные до этого момента объекты возвращаются клиенту. По умолчанию используется 120 секунд, и нельзя задать время поиска больше этого значения. |
ReferalChasing | Поиск может распространяться на несколько доменов. Если корень, который определен в SearchRoot , является родительским доменом или корень не был определен, поиск может распространиться на домены-потомки. С помощью этого свойства можно определить, что поиск должен продолжаться на других серверах. ReferalChasingOption.None означает, что поиск не продолжается на другие серверы. С помощью значения ReferalChasingOption.Subordinate можно определить, что поиск должен переходить на домены-потомки. Когда поиск начинается в DC=Wrox, DC=COM, сервер возвращает множество результатов и ссылку на DC=France, DC=Wrox, DC=COM. Клиент может продолжить поиск в поддомене. ReferalChasingOption.External означает, что сервер может направить клиента на независимый сервер, которого нет в поддомене. Это вариант поведения по умолчанию. Для ReferalChasingOption.All возвращаются ссылки на внешние домены и подчиненные домены. |
В рассматриваемом примере поиска мы хотим найти все объекты пользователей в организационной единице Wrox Press, где свойство description
содержит значение Author
.
Сначала мы соединяемся с организационной единицей Wrox Press. Здесь начинается поиск. Создадим объект DirectorySearcher
, где задан SearchRoot
. Фильтр определяется как (&(objectClass=user)(description=Auth*)
) для того, чтобы мы нашли все объекты типа user
, где свойство description
начинается с последовательности Auth
, за которой может следовать что-то еще. Область поиска должна быть поддеревом, чтобы поиск происходил в порождаемых организационных единицах для Wrox Press:
DirectoryEntry de new DirectoryEntry();
de.Path = 'LDAP://OU=Wrox Press, ' + 'DC=eichkogelstrasse, DC=local';
DirectorySearcher searcher = new DirectorySearcher();
searcher.SearchRoot = de;
searcher.Filter = '(&(objectClass=user)(description=Auth*))';
searcher.SearchScope = SearchScope.Subtree;
В результате поиска мы хотим получить свойства name
, description
, givenName
, и wWWHomePage
.
searcher.PropertiesToLoad.Add('name');
searcher.PropertiesToLoad.Add('description');
searcher. PropertiesToLoad.Add('givenName');
searcher.PropertiesToLoad.Add('wWWHomePage');
Мы готовы начать поиск. Однако, результат необходимо отсортировать. DirectorySearcher
имеет свойство Sort
, где можно задать SortOption
. Первый аргумент конструктора SortOption
определяет свойство, по которому будет проводиться сортировка, второй аргумент определяет направление сортировки. Перечисление SortDirection
имеет значения Ascending
и Descending
.
Чтобы начать поиск, можно использовать метод FindOne()
для нахождения первого объекта или FindAll()
, чтобы найти все объекты. FindOne()
вернет простой SearchResult
, FindAll()
вернет SearchResultCollection
. Мы хотим получить всех авторов, поэтому используем FindAll()
:
searcher.Sort = new SortOption('givenName', SortDirection.Ascending);
SearchResultCollection Results = searcher.FindAll();
С помощью цикла foreach
мы получаем доступ ко всем SearchResult
в SearchResultCollection
. SearchResult
представляет один объект в кэше поиска.