C#如何向具有多个对象类的LDAP添加条目

时间:2010-04-23 08:43:40

标签: c# ldap openldap

我正在尝试使用对象类 person uidObject 在OpenLDAP中创建新的用户记录。问题似乎是使用System.DirectoryServices.DirectoryEntry我发现只有一种方法可以添加一个具有一个对象类的新条目,但不能添加多个对象类。

这个C#代码

DirectoryEntry nRoot = new DirectoryEntry(path);
nRoot.AuthenticationType = AuthenticationTypes.None;
nRoot.Username = username;
nRoot.Password = pwd;

try
{
    DirectoryEntry newUser = nRoot.Children.Add("CN=" + "test", "person");
    newUser.Properties["cn"].Add("test");
    newUser.Properties["sn"].Add("test");
    newUser.Properties["objectClass"].Add("uidObject"); // this doesnt't make a difference
    newUser.Properties["uid"].Add("testlogin"); // this causes trouble
    newUser.CommitChanges();
}
catch (COMException ex)
{
    Console.WriteLine(ex.ErrorCode + "\t" + ex.Message);
}

...导致错误:

  

-2147016684请求的操作不满足一个或多个   与对象类关联的约束。 (例外   HRESULT:0x80072014)

1 个答案:

答案 0 :(得分:6)

事实证明,您可以在条目首次存储到LDAP并再次提取后添加对象类。所以,通过一个简单的改变它就可以了![/ p>

DirectoryEntry newUser = nRoot.Children.Add("CN=" + "test", "person");
newUser.Properties["cn"].Add("test");
newUser.Properties["sn"].Add("test");
newUser.CommitChanges();

newUser.RefreshCache();
newUser.Properties["objectClass"].Add("uidObject");
newUser.Properties["uid"].Add("testlogin");
newUser.CommitChanges();