2008-08-28 6 views
4

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

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

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

ответ

3

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

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

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

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

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

2

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

2

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

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