抛出PrincipalExistsException,但Principal实际上不存在

时间:2012-08-21 22:25:13

标签: c# active-directory windows-server-2008-r2 directoryservices

鉴于以下代码,当我知道校长不存在且实际上没有制作时,为什么我会得到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)查看我无法在任何地方找到“新”创建主体,因此我假设它没有被创建,并且该异常以某种方式对我说谎。

我很感激任何帮助。提前谢谢。

2 个答案:

答案 0 :(得分:0)

我能想到的唯一一件事就是以下

无论您的应用程序运行的是什么ID,都需要对AD进行“写入”访问。几乎任何ID都可以查询AD,但只有明确授予ID的ID才能写入。

答案 1 :(得分:0)

好的,我明白了。 SamAccountName是引发异常的原因(感谢Microsoft提供了有用的错误消息)。无论如何,这是问题,因为它试图将其设置为已存在的名称。我通过在中间的首字母中进行修改来修改它并且它工作正常,或者至少在我得到具有相同的第一个初始,中间名字和姓氏的人之前。