C# 如何通过扩展UserPrincipal类在Active Directory中创建联系人?

C# 如何通过扩展UserPrincipal类在Active Directory中创建联系人?,c#,active-directory,contacts,userprincipal,principalcontext,C#,Active Directory,Contacts,Userprincipal,Principalcontext,我需要在Active Directory中创建联系人。我有一个扩展UserPrincipal的类。如何使用它创建新联系人?下面的代码引发PrincipalOperationException“请求的操作未满足与对象类关联的一个或多个约束。”异常 [DirectoryObjectClass("contact")] [DirectoryRdnPrefix("CN")] internal class MyContact : UserPrincipal { public MyContact(P

我需要在Active Directory中创建联系人。我有一个扩展UserPrincipal的类。如何使用它创建新联系人?下面的代码引发PrincipalOperationException“请求的操作未满足与对象类关联的一个或多个约束。”异常

[DirectoryObjectClass("contact")]
[DirectoryRdnPrefix("CN")]
internal class MyContact : UserPrincipal
{

    public MyContact(PrincipalContext context)
        :base(context)
    {   
    }

}

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "domain", 
     "OU=Unit1,DC=domain,DC=com", "login", "pass"))
{

     using (MyContact principal = new MyContact(pc))
     {
         principal.Name = "Cnt1";
         principal.Save();
     }
 }

我做错了什么?

联系人对象不是安全主体。它没有SID或SAM帐户名。使用任何主体类来表示联系人对象似乎是不对的。

Custom UserPrincipal有DirectoryObjectClass,您可以在其中指定AD类。我能够创建从UserPrincipal派生的类,搜索、读取和更新联系人以及特定于联系人的所有广告属性。一切都很完美。所以我认为这应该是可能的。我唯一不明白的是如何使用UserPrincipal创建新联系人。我想有一些特定于Contact的属性缺失或是额外的,我需要以某种方式从UserPrincipal中删除它。我认为它只适用于表示安全主体的类。联系人不是安全主体(没有SID,SAM帐户名),它也没有用户支持的许多属性(例如userAccountControl)。如果基础主体类尝试访问相关信息,则可能会导致问题。无论如何,如果您从未接触过任何与安全主体或用户相关的属性,那么它可能会起作用。但我高度怀疑这一点。