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;
}
Одно
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
рейтинг книги
Попытка возврата. Тетралогия
Попытка возврата
Фантастика:
альтернативная история
9.26
рейтинг книги
Аромат невинности
Любовные романы:
любовно-фантастические романы
эро литература
9.23
рейтинг книги
Теневой путь. Шаг в тень
1. Теневой путь
Фантастика:
фэнтези
6.71
рейтинг книги
Газлайтер. Том 9
9. История Телепата
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Неправильный лекарь. Том 1
1. Неправильный лекарь
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XVIII
18. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Мимик нового Мира 5
4. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
На границе империй. Том 7. Часть 2
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
Кодекс Крови. Книга ХIII
13. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Самый лучший пионер
1. Самый лучший пионер
Фантастика:
попаданцы
альтернативная история
5.62
рейтинг книги
Новый Рал 3
3. Рал!
Фантастика:
попаданцы
5.88
рейтинг книги
Помещица Бедная Лиза
Любовные романы:
любовно-фантастические романы
6.40
рейтинг книги
Граф
6. Помещик
Фантастика:
альтернативная история
5.00