DirectoryEntry de2 = new DirectoryEntry("LDAP://DC=eichkogelstrasse, DC=local");
Даже если создание объекта
DirectoryEntry
пройдет успешно, это не означает, что и связывание было успешным. Связывание произойдет, когда в первый раз будет прочитано свойство во избежание ненужного сетевого трафика. Существует ли объект или правильны ли полномочия определенного пользователя, можно будет увидеть при первом доступе к объекту.
Получение записей каталога
Теперь, когда мы знаем, как определить атрибута связывания с объектом в активном каталоге, давайте прочитаем атрибуты объекта.
Свойства объектов пользователей
Класс
DirectoryEntry
имеет некие свойства
Name
,
Guid
и
SchemaClassName
для получения информации об объекте. Первый раз при доступе к свойству объекта
DirectoryEntry
происходит связывание и заполняется кэш. Когда мы обращаемся к другому свойству, мы считываем его из кэша, и коммуникации с сервером не требуется для данных из того же объекта.
В следующем примере мы обращаемся к объекту пользователя с общим именем Christian Nagel в организационной единице Wrox Press.
активного каталога содержит значительно больше информации. Доступность информации зависит от типа объекта. Чтобы получить всю информацию об объекте, свойство
Properties
возвращает
PropertyCollection
. Каждое свойство само является коллекцией, так как одно свойство может иметь несколько значений, например, объект пользователя может иметь несколько телефонных номеров. Мы перебираем значения с помощью внутреннего цикла
foreach
. Коллекция, которая возвращается из
properties[name]
является массивом объектов. Значения атрибутов могут быть строками, числами или другими типами данных. Мы используем метод
ToString
для вывода значений.
Console.WriteLine("Attributes: ");
PropertyCollection properties = de.Properties;
foreach (string name in properties.PropertyNames) {
foreach (object о in properties[name]) {
Console.WriteLine(name + ": " + o.ToString);
}
}
В выходных результатах мы видим все атрибуты объекта пользователя Christian Nagel. Заметим, что otherTelephone является многозначным свойством, которое содержит несколько телефонных номеров. Некоторые из значений свойств просто выводят тип объекта
System._ComObject
. Чтобы получить значения этих атрибутов, необходимо непосредственно использовать интерфейсы ADSI COM, которые также берутся из классов в пространстве имен
System.DirectoryServices
.
В главе 19 можно прочитать, как работать с объектам и и интерфейсами COM.
Для получения дополнительной информации об ADSI можно прочитать книгу Simon Robinson, Professional ADSI Programming, Wrox Press, ISBN 1-861002-26-2.
Доступ к свойствам непосредственно по имени
С помощью
DirectoryEntry.Properties
можно получить доступ ко всем свойствам. Если имя свойства известно, можно получить значение непосредственно:
foreach (string homePage in de.Properties["wWWHomePage"])
Console.WriteLine("Home page; " + homePage);
Коллекции объектов
Объекты хранятся в активном каталоге иерархически. В контейнерных объектах содержатся объекты-потомки. Их можно перечислить с помощью свойства
Children
класса
DirectoryEntry
. В другом направлении можно получить контейнер объекта с помощью свойства