1

次のコードを考えるとPrincipalExistsException、プリンシパルが存在せず、実際には作成されていないという事実を知っているのはなぜですか?

public UserPrincipal Add(
    string givenName,
    string surname,
    string domain) {
    UserPrincipal principal = new UserPrincipal(context: base.Context) {
        Enabled = true
    };

    if (!String.IsNullOrEmpty(givenName) && !String.IsNullOrEmpty(surname) && !String.IsNullOrEmpty(domain)) {
        this.RenameInternal(principal: principal, givenName: givenName, surname: surname, domain: domain);

        principal.Save();
    };

    return principal;
}

RenameInternal()という名前のメソッドによって呼び出されるため、メソッドが正常に機能することを確認できますRename()。したがって、オブジェクトの作成方法や保存方法に問題があるはずですが、エラーの場所を見つける方法がわかりません。これは十分に単純なコードのように思えます...

ドメイン コントローラー (Windows Server 2008 R2) を調べると、「新しく」作成されたプリンシパルがどこにも見つからないため、作成されておらず、例外が何らかの形で横たわっていると想定しています。

これについて何か助けていただければ幸いです。前もって感謝します。

4

2 に答える 2

1

わかりました、私はそれを理解しました。SamAccountName が例外のスローの原因でした (これまでに役立つエラー メッセージを提供してくれた Microsoft に感謝します)。とにかく、すでに存在する名前に設定しようとしていたため、問題でした。中間のイニシャルを入れて修正したところ、正常に動作しています。少なくとも、最初のイニシャル、ミドル ネームのイニシャル、姓が同じ人が現れるまでは問題ありませんでした。

于 2012-08-22T01:54:18.117 に答える
0

私がオフハンドで考えることができる唯一のことは次のとおりです

アプリケーションが実行されている ID が何であれ、AD への「書き込み」アクセス権が必要です。ほぼすべての ID が AD にクエリを実行できますが、AD に書き込むことができるのは、特権を明示的に付与された ID だけです。

于 2012-08-21T22:29:55.607 に答える