1

検索パラメーターとして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血まみれのエラーメッセージは少しわかりにくいので、これについて尋ねることに頼りました。少なくとも私にとっては(ローカルエラーが発生しました)本当に?それが有用なエラーメッセージであると開発者が考えたものはどれでもばかです。

4

1 に答える 1

2

考えられる原因:

  1. コンピューターのドメインメンバーシップまたは認証に問題があります。たとえば、コードを実行しているコンピューターの時計は、ターゲットドメインのDCと同期されていますか(5分以内)?
  2. ユーザー名が無効です。たとえば、無効な文字が含まれています。
于 2012-09-17T12:06:12.783 に答える