代码之家  ›  专栏  ›  技术社区  ›  James King

PermissionModifyControl在C#LDAP中引发DirectoryOperationException

  •  4
  • James King  · 技术社区  · 14 年前

    使用 System.DirectoryServices.Protocols 在Active Directory组上添加/修改属性的命名空间。代码:

    public void UpdateProperties(Dictionary<string, string> Properties) {
    
        List<DirectoryAttributeModification> directoryAttributeModifications;
    
        //  ... Code to convert Properties dictionary to directoryAttributeModifications
        //  There is one 'Add' modification, to set the 'description' of the group
    
        ModifyRequest modifyRequest = new ModifyRequest(groupDistinguishedName, directoryAttributeModifications.ToArray());
        modifyRequest.Controls.Add(new PermissiveModifyControl());
        ModifyResponse response = connection.SendRequest(modifyRequest) as ModifyResponse;
    

    PermissiveModifyControl 如果描述已经存在,则用于防止代码失败。我找到的有关PermissionModifyControl的唯一信息如下: http://msdn.microsoft.com/en-us/library/bb332056.aspx

    其中规定:

    允许修改控制 modify操作在不引发 DirectoryOperationException 错误。

    但是,当上述代码到达 SendRequest() ,它抛出一个 目录操作异常 :“属性存在或已赋值。”

    我试图避免的是必须查询传递的集合中的每个属性;如果存在,创建一个 Replace DirectoryAttributeModification Add 允许修改控制 就应该这么做。

    有人能解释一下原因吗 允许修改控制 仍然抛出一个 目录操作异常 ,如何正确使用?

    提前谢谢! 詹姆斯

    1 回复  |  直到 14 年前
        1
  •  3
  •   James King    14 年前

    经过更多的实验,我发现这些文件是误导性的。。。如果不想添加属性,就要替换它( DirectoryAttributeOperation.Replace ). 如果属性存在,它当然会替换它。如果属性不存在,它将创建它。

    我剩下的代码是正确的。