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,但只有明确授予权限的 ID 才能写入它。

于 2012-08-21T22:29:55.607 回答