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

на главную - закладки

Жанры

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

Ватсон Карли

Шрифт:

protected string SetNamingContext {

 using (DirectoryEntry de = new DirectoryEntry) {

string path = "LDAP://" + hostname + "/rootDSE";

 de.Username = username;

 de.Password = password;

 de.Path = path;

 schemaNamingContext =

de.Properties["schemaNamingContext"][0].ToString;

 defaultNamingContext =

de.Properties["defaultNamingContext"][0].ToString;

 }

}

Получение

имен свойств класса пользователя

У нас есть имя LDAP для доступа к схеме. Можно использовать его для доступа к каталогу и для считывания свойств. Мы заинтересованы не только в свойствах класса User, но также в свойствах базовых классов для

User
:
Organizational-Person
,
Person
и
Top
. В этой программе имена базовых классов жестко закодированы. Можно было бы прочитать базовый класс динамически с помощью атрибута
subClassOf
. Метод
GetSchemaProperties
возвращает строковый массив со всеми именами свойств определенного типа объектов. Все имена свойств собраны в объекте
properties
типа
StringCollection
:

protected void SetUserProperties(string schemaNamingContext) {

 StringCollection properties = new StringCollection;

 string[] data = GetSchemaProperties(schemaNamingContext, "User");

 properties.AddRange(GetSchemaProperties(schemaNamingContext, "Organizational-Person"));

 properties.AddRange(GetSchemaProperties(schemaNamingContext, "Person"));

 properties.AddRange(GetSchemaProperties(schemaNamingContext, "Top"));

 listBoxProperties.Items.Clear;

 foreach (string s in properties) {

listBoxProperties.Items.Add(s);

 }

}

В методе

GetSchemaProperties
мы снова обращаемся к активному каталогу. В этот раз вместо
rootDSE
используется имя LDAP в схеме, которое мы обнаружили ранее. Свойство
systemMayContain
содержит коллекцию всех атрибутов, которые допустимы в классе
objectType
:

protected string[] GetSchemaProperties(string schemaNamingContext, string objectType) {

 string [] data;

 using (DirectoryEntry de = new DirectoryEntry) {

de.Username = username;

de.Password = password;

de.Path = "LDAP://" + hostname + "/CN=" + objectType + "," + schemaNamingContext;

DS.PropertyCollection properties = de.Properties;

DS.PropertyValueCollection values = properties["systemMayContain"];

data = new String[values.Count];

values.CopyTo(data, 0);

 }

 return data;

}

Одно

интересное замечание к этому коду: в приложении Windows Forms класс
PropertyCollection
пространства имен
System.DirectoryServices
имеет конфликт имен с
System.Data.PropertyCollection
. Поскольку писать такие длинные имена как
System.DirectoryServices.PropertyCollection
не всегда хочется, то с целью разрешения конфликта имя пространства имен можно сократить с помощью

namespace DS = System.DirectoryServices;

Именно отсюда появляется

DS.PropertyCollection
.

Шаг 2 приложения завершен. Окно списка (

listbox
) содержит все имена свойств объектов
User
.

Поиск объектов User

Обработчик для кнопки поиска вызывает вспомогательный метод

FillResult
:

private void buttonSearch_Click(object render, System.EventArgs e) {

 try {

FillResult;

 } catch (Exception ex) {

MessageBox.Show("Check your input: " + ex.Message)

 }

}

В методе

FillResult
выполняется обычный поиск в полном домене активного каталога, как мы видели раньше.
SearchScope
задается как
Subtree
,
Filter
для строки мы получаем из
TextBox
, а свойства, которые должны быть загружены в кэш, задаются значениями, которые пользователь выбирает в окне списка

protected void FillResult {

 using (DirectoryEntry root = new DirectoryEntry) {

root.Username = username;

root.Password = password;

root.Path = "LDAP://" + hostname + defaultNamingContext;

using (DirectorySearcher searcher = new DirectorySearcher) {

seacher.SearchRoot = root;

searcher.SearchScope = SearchScope.Subtree;

searcher.Filter = textboxfilter.Text;

searcher.PropertiesToLoad.AddRange(GetProperties);

SearchResultCollection results = searcher.FindbAll;

StringBuilder summary = new StringBuilder;

foreach (SearchResult result in results) {

foreach (string propName in result.Properties.PropertyNames) {

foreach (string s in result.Properties[propName]) {

summary.Append(" " + propName + ": " + s + "\r\n");

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

Вечный. Книга I

Рокотов Алексей
1. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга I

Попытка возврата. Тетралогия

Конюшевский Владислав Николаевич
Попытка возврата
Фантастика:
альтернативная история
9.26
рейтинг книги
Попытка возврата. Тетралогия

Аромат невинности

Вудворт Франциска
Любовные романы:
любовно-фантастические романы
эро литература
9.23
рейтинг книги
Аромат невинности

Теневой путь. Шаг в тень

Мазуров Дмитрий
1. Теневой путь
Фантастика:
фэнтези
6.71
рейтинг книги
Теневой путь. Шаг в тень

Газлайтер. Том 9

Володин Григорий
9. История Телепата
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Газлайтер. Том 9

Неправильный лекарь. Том 1

Измайлов Сергей
1. Неправильный лекарь
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Неправильный лекарь. Том 1

Кодекс Охотника. Книга XVIII

Винокуров Юрий
18. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVIII

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

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

На границе империй. Том 7. Часть 2

INDIGO
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 7. Часть 2

Кодекс Крови. Книга ХIII

Борзых М.
13. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХIII

Самый лучший пионер

Смолин Павел
1. Самый лучший пионер
Фантастика:
попаданцы
альтернативная история
5.62
рейтинг книги
Самый лучший пионер

Новый Рал 3

Северный Лис
3. Рал!
Фантастика:
попаданцы
5.88
рейтинг книги
Новый Рал 3

Помещица Бедная Лиза

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.40
рейтинг книги
Помещица Бедная Лиза

Граф

Ланцов Михаил Алексеевич
6. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Граф