Чтение онлайн

на главную

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

Объект теперь имеет значения свойств по умолчанию. Чтобы присвоить специальные значения свойств, можно добавить свойства с помощью метода

Add
свойства
Properties
. Конечно, все свойства должны существовать в схеме для объекта пользователя. Если определенное свойство не существует, то возникнет исключение
COMException
"The specified directory service attribute or value doesn't exist" ("Указанный атрибут или значение службы каталога не существует"). Если имена атрибутов правильны, но сервер отказывает во входе в связи с незаконным паролем или пропущенным свойством, исключение
COMException
будет содержать сообщение "The server is unwilling to process the request" ("Сервер не желает обрабатывать запрос").

user.Properties["company"].Add("Some Company");

user.Properties["department"].Add("Sales");

user.properties["employeeID"].Add("4711");

user.Properties["samAccountName"].Add("John Doe");

user.Properties["userPassword"].Add("someSecret");

В

данный момент не все данные записаны в активный каталог. Необходимо очистить кэш:

user.CommitChanges;

Поиск в активном каталоге

Большую часть времени активный каталог будет использоваться для поиска некоторых значений. Это хранилище данных, которое оптимизировано в основном для чтения, поэтому данные будут в основном считываться.

Для поиска в активном каталоге платформа .NET имеет класс

DirectorySearcher
.

Мы можем использовать поиск только с провайдером LDAP.

DirectorySearcher
не работает с провайдерами NDS или IIS.

В конструкторе класса

DirectorySearcher
существуют четыре важные части поиска. Можно также использовать конструктор по умолчанию и определять параметры поиска с помощью свойств.

SearchRoot

Корень поиска (

SearchRoot
) определяет, где должен начаться поиск. По умолчанию
SearchRoot
является корнем домена, который используется в данный момент.
SearchRoot
определен с помощью свойства
Path
объекта
DirectoryEntry
.

Filter

Фильтр (Filter) определяет значения, которые мы хотим найти. Фильтр является строкой, которая должна быть заключена в круглые скобки.

Операторы отношений, такие как

<=
,
=
,
>=
, в выражениях допускаются. (
objectClass = contact
) будет искать все объекты типа
contact
; (
lastName>=Nagel
) ищет все объекты, где свойство
lastName
равно или больше
Nagel
, что означает, что оно следует за ним в алфавитном порядке.

Выражения могут комбинироваться с префиксными операциями

&
и
|
. (
&(objectClass=user)(description=Auth*)
) ищет все объекты типа
user
, где свойство
description
начинается со строки
Auth
. Так как операторы
&
и
|
находятся в начале выражения, то с помощью одного префиксного оператора можно комбинировать более двух выражений.

По умолчанию используется фильтр (

objectClass=*
), поэтому все объекты допустимы. Синтаксис фильтра определен в RFC 2254, "Строковое представление фильтров поиска LDAP". Этот RFC можно найти по адресу
www.ietf.org/rfc/rfc2254.txt
.

PropertiesToLoad

С помощью

PropertiesToLoad
мы определяем коллекцию
StringCollection
всех интересующих нас свойств. Как вы уже видели, объекты могут иметь множество свойств. Большинство из них будут не важны для нашего запроса поиска. Мы определяем свойства, загружаемые в кэш. Свойствами по умолчанию, которые мы получаем, если ничего не определено, являются
Path
и
Name
для объекта.

SearchScope

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
.

Поделиться:
Популярные книги

Измена. Я отомщу тебе, предатель

Вин Аманда
1. Измены
Любовные романы:
современные любовные романы
5.75
рейтинг книги
Измена. Я отомщу тебе, предатель

Сводный гад

Рам Янка
2. Самбисты
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Сводный гад

Мимик нового Мира 6

Северный Лис
5. Мимик!
Фантастика:
юмористическая фантастика
попаданцы
рпг
5.00
рейтинг книги
Мимик нового Мира 6

Идеальный мир для Лекаря 2

Сапфир Олег
2. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 2

Начальник милиции

Дамиров Рафаэль
1. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Темный Патриарх Светлого Рода 4

Лисицин Евгений
4. Темный Патриарх Светлого Рода
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 4

Стрелок

Астахов Евгений Евгеньевич
5. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Стрелок

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6

Архил…? Книга 3

Кожевников Павел
3. Архил...?
Фантастика:
фэнтези
попаданцы
альтернативная история
7.00
рейтинг книги
Архил…? Книга 3

Доктора вызывали? или Трудовые будни попаданки

Марей Соня
Фантастика:
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Доктора вызывали? или Трудовые будни попаданки

Лорд Системы 11

Токсик Саша
11. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 11

Черный Маг Императора 5

Герда Александр
5. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 5

Последний попаданец 2

Зубов Константин
2. Последний попаданец
Фантастика:
юмористическая фантастика
попаданцы
рпг
7.50
рейтинг книги
Последний попаданец 2