Симон Робинсон - C# для профессионалов. Том II
- Название:C# для профессионалов. Том II
- Автор:
- Жанр:
- Издательство:Лори
- Год:2003
- Город:Москва
- ISBN:5-85582-187-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Симон Робинсон - C# для профессионалов. Том II краткое содержание
Платформа .NET предлагает новую среду, в которой можно разрабатывать практически любое приложение, действующее под управлением Windows, а язык C# — новый язык программирования, созданный специально для работы с .NET.
В этой книге представлены все основные концепции языка C# и платформы .NET. Полностью описывается синтаксис C#, приводятся примеры построения различных типов приложений с использованием C# — создание приложений и служб Windows, приложений и служб WWW при помощи ASP.NET, а также элементов управления Windows и WWW Рассматриваются общие библиотеки классов .NET, в частности, доступ к данным с помощью ADO.NET и доступ к службе Active Directory с применением классов DirectoryServices.
Для кого предназначена эта книгаЭта книга предназначена для опытных разработчиков, возможно, имеющих опыт программирования на VB, C++ или Java, но не использовавших ранее в своей работе язык C# и платформу .NET. Программистам, применяющим современные технологии, книга даст полное представление о том, как писать программы на C# для платформы .NET.
Основные темы книги• Все особенности языка C#
• C# и объектно-ориентированное программирование
• Приложения и службы Windows
• Создание web-страниц и web-служб с помощью ASP NET
• Сборки .NET
• Доступ к данным при помощи ADO NET
• Создание распределённых приложений с помощью NET Remoting
• Интеграция с COM, COM+ и службой Active Directory
C# для профессионалов. Том II - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
using (DirectoryEntry de = new DirectoryEntry()) {
de.Path = "LDAP://celticrain/DC=eichkogelstrasse, DC=local";
de.Username = "nagel@eichkogelstrasse.local";
de.Password = "someSecret";
// использовать полномочия текущего пользователя
DirectoryEntry de2 = new DirectoryEntry("LDAP://DC=eichkogelstrasse, DC=local");
Даже если создание объекта DirectoryEntry
пройдет успешно, это не означает, что и связывание было успешным. Связывание произойдет, когда в первый раз будет прочитано свойство во избежание ненужного сетевого трафика. Существует ли объект или правильны ли полномочия определенного пользователя, можно будет увидеть при первом доступе к объекту.
Получение записей каталога
Теперь, когда мы знаем, как определить атрибута связывания с объектом в активном каталоге, давайте прочитаем атрибуты объекта.
Свойства объектов пользователей
Класс 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);
Коллекции объектов
Объекты хранятся в активном каталоге иерархически. В контейнерных объектах содержатся объекты-потомки. Их можно перечислить с помощью свойства 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
. Лучше этого не делать, так как это будет порождать множество ненужных обращений к серверу.
Запись изменений в объекты также происходит только в кэше. Задание множества свойств не генерирует сетевого трафика. Метод DirectoryEntry.CommitChanges()
требуется для очистки кэша и переноса всех измененных данных на сервер. Чтобы снова получить вновь записанные данные из хранилища каталога, можно для чтения свойств использовать метод DirectoryEntry.RefreshCache()
. Задание свойства UsePropertyCache
как false
может быть очень полезно для отладки, чтобы увидеть, какое свойство было изменено неправильно.
Обновление записей каталога
Объекты в активном каталоге обновляются так же легко, как и читаются. Изменение значений возможно после считывания объекта. Чтобы удалить все значения одного свойства, может вызываться метод PropertyValueCollection.Clear()
. С помощью метода Add()
к свойству могут добавляться новые значения. Remove()
и RemoveAt()
удаляют специфические значения из коллекции свойства:
Интервал:
Закладка: