検索パラメーターとしてSamAccountNameに基づいて特定のユーザーGivenName(forename)とSurnameをアクティブディレクトリで検索し、指定された名前とsurnameを含む文字列を返すコードを記述しています。
私がこれまでに書いたコードは次のとおりです。
public static string GetName(string uName)
{
StringBuilder builder = new StringBuilder();
using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "serverName"))
{
UserPrincipal user = new UserPrincipal(context);
user.SamAccountName = uName;
PrincipalSearcher srch = new PrincipalSearcher(user);
srch.QueryFilter = user;
PrincipalSearchResult<Principal> res = srch.FindAll();
foreach (UserPrincipal u in res)
{
builder.Append(u.GivenName);
builder.Append(" ");
builder.Append(u.Surname);
}
return builder.ToString();
}
}
上記のコードで私が抱えている問題は、実行時に行が
user.SamAccountName = uName;
次のエラーがスローされます。DirectoryServicesCOMExceptionunhandled"ローカルエラーが発生しました"
プリンシパルコンテキストオブジェクトは、ユーザープリンシパルオブジェクトと同様に問題なく作成され、上記の行を実行したときにのみエラーをスローします。さらに奇妙なのは、このコードが数日前に機能したように見えたことです。これを読んでいる人が、なぜこのエラーが発生するのかについて何か考えがあれば、私は大いに感謝します!
PS血まみれのエラーメッセージは少しわかりにくいので、これについて尋ねることに頼りました。少なくとも私にとっては(ローカルエラーが発生しました)本当に?それが有用なエラーメッセージであると開発者が考えたものはどれでもばかです。