Как создать контакт в Active Directory, расширив класс UserPrincipal?

Мне нужно создать контакт в 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();
     }
 }

Что я делаю не так?


person IT Hit WebDAV    schedule 10.02.2015    source источник


Ответы (1)


контактный объект не является участником безопасности. У него нет имени учетной записи SID или SAM. Кажется неправильным использовать какой-либо класс Principal для представления контактного объекта.

person baldpate    schedule 11.02.2015
comment
Пользовательский UserPrincipal имеет класс DirectoryObjectClass, где вы можете указать класс AD. Я смог создать класс, производный от UserPrincipal, искать, читать и обновлять контакты и все атрибуты AD, характерные для Contact. Все работает отлично. Поэтому я думаю, что это должно быть возможно. Единственное, что я не могу понять, это как создать новый контакт с помощью UserPrincipal. Я предполагаю, что есть какое-то свойство, специфичное для Contact, которое либо отсутствует, либо является дополнительным, и мне нужно как-то удалить его из UserPrincipal. - person IT Hit WebDAV; 11.02.2015
comment
Я думаю, что это работает только для классов, представляющих участника безопасности. contact не является участником безопасности (без SID, имени учетной записи SAM), у него также нет многих атрибутов, поддерживаемых пользователем (например, userAccountControl). Если базовый класс Principal попытается получить доступ к связанной информации, это может вызвать проблемы. В любом случае, если вы никогда не касаетесь каких-либо свойств, связанных с субъектом безопасности или пользователем, возможно, это сработает. Но я сильно это подозреваю. - person baldpate; 11.02.2015