Кэширование данных Active Directory - PullRequest
4 голосов
/ 28 августа 2008

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

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

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

Ответы [ 4 ]

3 голосов
/ 02 сентября 2008

Для того, чтобы взять под контроль свойства, которые вы хотите кэшировать, вы можете вызвать '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 голосов
/ 02 сентября 2008

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

2 голосов
/ 31 августа 2008

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

2 голосов
/ 29 августа 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...