Active Directory からユーザーのリストを取得しようとしています。基本的な検索フィルターは次のとおりです。
objectCategory=person
objectClass=user
name=*'username'*
これはコードです:
public static List<User> GetByUserName(string userName)
{
DirectorySearcher ds = new DirectorySearcher();
List<User> userList = new List<User>();
try
{
ds.SearchRoot = new DirectoryEntry("LDAP://domain","user_name", "password");
ds.Filter = "(|(&(objectCategory=person)(objectClass=user)(name=*" + userName + "*)))";
ds.PropertyNamesOnly = true;
ds.PropertiesToLoad.Add("samaccountname");
ds.PropertiesToLoad.Add("name");
ds.PropertiesToLoad.Add("mail");
ds.Sort = new SortOption("name", SortDirection.Ascending);
foreach (SearchResult sr in ds.FindAll())
{
DirectoryEntry de = sr.GetDirectoryEntry();
User newUser = new User();
newUser.Name = de.Name.Substring(3);
newUser.AccountName = (string)de.Properties["samaccountname"].Value ?? " <Undefined>";
newUser.EmailAddress = (string)de.Properties["mail"].Value ?? "<Undefined>";
userList.Add(newUser);
}
}
catch (Exception ex)
{
throw new Exception("There was a problem search the Active Directory: " + ex.Message);
}
return userList;
}
問題は、結果が得られることもありますが、同じユーザー名では得られないことがあります。とても奇妙です。
それが機能している場合、10〜15秒で結果が得られます.
しかし、時々 120 秒を検索していて、タイムアウトを受け取りました。ServerTimeLimit を設定した場合はそれよりも早く。
なぜうまくいくのか、うまくいかないのかわかりません。ランダムに思えます。
コードまたは他の場所に問題がありますか?
手伝ってくれてありがとう。