繁体   English   中英

缓存Active Directory数据

[英]Caching Active Directory Data

在我的一个应用程序中,我正在查询活动目录以获取给定用户下的所有用户的列表(使用“直接报告”的东西)。 所以基本上,给定人的名字,在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非常强大,典型的专用AD服务器实际上在日常运营中非常轻松, 但最好与您的IT部门/支持人员联系。

另一种方法是使用每日脚本将AD数据转储到CSV文件和/或将其导入SQL数据库。 (Oracle有一个SELECT CONNECT BY功能,可以在结果集中自动创建多级层次结构.MSSQL可以通过一些递归IIRC来做类似的事情)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM