2

AD に情報を照会することがよくあります (例: Windows プリンシパル、セキュリティ グループなどのフェッチ)。そのような情報をキャッシュする良い方法を知りたいです。例えば:

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

私が達成したいと思っているのは、FindByIdentity()「ねえ、最近このクエリを実行したので、ADを二度と気にしないように」と判断して、ローカルキャッシュから取得することです。

質問 1: DirectoryServices または関連するライブラリは、そのようなメカニズムを提供しますか?

質問 2: 2 番目に、これらのクエリは 1 秒間に数百回の HTTP リクエストで起動されます。@HillBilly.Developer が以下に提案するように、独自のキャッシュ メカニズムを作成する必要がある場合、キャッシュ ストアの優先スコープはどれになりますか?

4

1 に答える 1

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にデータを照会する必要があるクラス/関数への呼び出しになります。

于 2012-08-17T01:11:45.907 に答える