Вопрос

В одном из моих приложений я запрашиваю active Directory, чтобы получить список всех пользователей ниже данного пользователя (используя функцию "Прямые отчеты").Таким образом, по сути, имя человека просматривается в AD, затем читаются прямые отчеты.Но тогда для каждого прямого отчета инструмент должен проверять прямые отчеты прямых отчетов.Или, более абстрактно:Инструмент будет использовать человека в качестве корня дерева, а затем пройтись по всему дереву, чтобы получить названия всех листьев (их может быть несколько сотен).

Теперь, очевидно, меня беспокоит производительность, поскольку это нужно делать довольно много раз.Моя идея состоит в том, чтобы вручную кэшировать это (по сути, просто поместить все имена в длинную строку и сохранить это где-нибудь и обновлять один раз в день).

Но мне просто интересно, есть ли более элегантный способ сначала получить информацию, а затем кэшировать ее, возможно, используя что-то в System.Пространство имен DirectoryServices?

Это было полезно?

Решение

Чтобы получить контроль над свойствами, которые вы хотите кэшировать, вы можете вызвать 'RefreshCache()', передавая свойства, которые вы хотите сохранить:

System.DirectoryServices.DirectoryEntry entry = new System.DirectoryServices.DirectoryEntry();               

// Push the property values from AD back to cache.

entry.RefreshCache(new string[] {"cn", "www" });

Другие советы

Active Directory довольно эффективен при хранении информации, и поиск не должен сильно сказываться на производительности.Если вы действительно намерены сохранить имена, вы, вероятно, захотите сохранить их в виде какой-нибудь древовидной структуры, чтобы вы могли видеть отношения всех людей.В зависимости от количества людей вы также можете ежедневно извлекать всю необходимую вам информацию, а затем запрашивать все запросы к вашей кэшированной копии.

AD выполняет такое кэширование за вас, так что не беспокойтесь об этом, если только производительность не станет проблемой.У меня есть программное обеспечение, выполняющее подобные действия в корпоративной интрасети в течение всего дня, которое принимает тысячи обращений в час, и мне никогда не приходилось настраивать производительность в этой области.

Зависит от того, насколько актуальной вы хотите видеть информацию.Если вы должно быть, есть разумно использовать самые последние данные в вашем отчете, а затем запрашивать их непосредственно у AD.И я согласен с тем, что AD достаточно надежен, обычный выделенный рекламный сервер на самом деле очень мало используется в обычных повседневных операциях но лучше всего проконсультироваться с вашим ИТ-отделом / специалистом службы поддержки.

Альтернативой является ежедневный скрипт для выгрузки данных рекламы в CSV-файл и / или импорта их в базу данных SQL.(В Oracle есть функция SELECT CONNECT BY, которая может автоматически создавать многоуровневые иерархии внутри результирующего набора.MSSQL может сделать аналогичную вещь с небольшим количеством рекурсии IIRC).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top