Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

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);

Коллекции объектов

Объекты хранятся в активном каталоге иерархически. В контейнерных объектах содержатся объекты-потомки. Их можно перечислить с помощью свойства

Children
класса
DirectoryEntry
. В другом направлении можно получить контейнер объекта с помощью свойства
Parent
.

Объект пользователя не имеет потомков, поэтому воспользуемся теперь организационной единицей. Давайте получим все объекты пользователей из организационной единицы Wrox Press в домене eichkogelstrasse.local. Свойство

Children
возвращает коллекцию
DirectoryEntries
, которая содержит объекты
DirectoryEntry
. Мы просматриваем все объекты
DirectoryEntry
для вывода имен объектов-потомков:

DirectoryEntry de = new DirectoryEntry;

de.Path. = "LDAP://celticrain/OU=Wrox Press, " + "DC=eichkogelstrasse, DC=local";

Console.WriteLine("Children of " + de.Name);

foreach (DirectoryEntry obj in de.Children) {

 Console.WriteLine(obj.Name);

}

В данном примере мы видим все объекты в организационной единице: пользователей, контакты, принтеры, общие ресурсы и другие организационные единицы. Если нужно увидеть только некоторые типы объектов, можно использовать свойство

SchemaFilter
класса
DirectoryEntries
:

DirectoryEntry de = new DirectoryEntry;

de.Path = "LDAP://celticrain/OU=Wrox Press, " + "DC=eichkogelstrasse, DC-local";

Console.WriteLine("Children of " + de.Name);

de.Children.SchemaFilter.Add("user");

foreach(DirectoryEntry obj in de.Children) {

 Console.WriteLine(obj.Name);

}

В результате мы видим в организационной единице только объекты пользователей:

Кэш

Чтобы уменьшить сетевой трафик, ADSI использует кэш для свойств объектов. Как было показано ранее, обращение к серверу не происходит при создании объекта

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

  • Читать дальше
  • 1
  • ...
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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