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

Свойства объектов пользователей

Свойства объектов пользователей

Класс DirectoryEntry имеет некие свойства Name, Guid и SchemaClassName для получения информации об объекте. Первый раз при доступе к свойству объекта DirectoryEntry происходит связывание и заполняется кэш. Когда мы обращаемся к другому свойству, мы считываем его из кэша, и коммуникации с сервером не требуется для данных из того же объекта.

В следующем примере мы обращаемся к объекту пользователя с общим именем Christian Nagel в организационной единице Wrox Press.

DirectoryEntry de = new DirectoryEntry();
de.Path = "LDAP://celticrain/CN=Christian Nagel, " +
 "OU=Wrox Press, DC=eichkogelstrasse, DC=local";
Console.WriteLine("Name: "+ de.Name);
Console.WriteLine("GUID: " + de.Guid);
Console.WriteLine("Type: " + de.SchemaClassName);
Console.WriteLine();

Объект активного каталога содержит значительно больше информации. Доступность информации зависит от типа объекта. Чтобы получить всю информацию об объекте, свойство 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);

Оглавление книги


Генерация: 1.732. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз