缓存网站的Active Directory查询

时间:2012-08-16 23:34:25

标签: asp.net caching web-applications active-directory directoryservices

我经常查询AD以获取信息(例如,获取Windows主体,安全组等),并且想知道缓存此类信息的好方法。例如:

var pc = new PrincipalContext(ContextType.Domain);
var up = UserPrincipal.FindByIdentity(pc, User.Identity.Name);

我希望完成的是FindByIdentity()或类似的东西来决定“嘿,我最近运行此查询,让我们不再烦扰AD”并从本地缓存中获取它?

问题1: DirectoryServices或任何相关库是否提供此类机制?

问题2:其次,这些查询是针对Http请求触发的,可能是每秒几百次。如果我必须编写自己的缓存机制,正如@ HillBilly.Developer在下面建议的那样,缓存存储的优先范围是什么?

1 个答案:

答案 0 :(得分:0)

创建一个表示要存储的数据的类,填充它,将其存储在缓存中,并过期。

未经测试!,但应该给你一个想法

public class UserData 
{
     public string Username {get; set;}
     public string Email {get; set;} 
}

然后,您需要填充它:

List<UserData> ud;

ud = (List<UserData>)Cache["UserData"];

if(ud == null) 
{
        ud = AD.RetrieveUsers();
        Cache.Add("UserData", ud, null, DateTime.Now.AddHours(1), Cache.NoSlidingExpiration, CacheItemPriority.High, null);
}

显然,对AD.RetrieveUsers()的调用将是您要为数据查询AD所需的任何类/函数。

相关问题