2010-08-10 2 views
4

System.DirectoryServices.Protocols 네임 스페이스를 사용하여 Active Directory 그룹의 특성을 추가/수정합니다. 코드 :PermissiveModifyControl이 C# LDAP에서 DirectoryOperationException을 throw합니다.

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는 설명이 이미 존재하는 경우 실패의 코드를 유지하기위한 것입니다. 내가 찾은 PermissiveModifyControl에 대한 유일한 정보는 여기에 있습니다 : http://msdn.microsoft.com/en-us/library/bb332056.aspx

어떤 상태 : 그것을 삭제하려고하면

되는 LDAP는 이미 존재하는 속성을 추가하려고하면 요청이 정상적으로 실패 수정하거나 존재하지 않는 속성. PermissiveModifyControl을 사용하면 DirectoryOperationException 오류가 발생하지 않고 수정 작업이 완료됩니다. 위의 코드는 SendRequest()에 도달 할 때

그러나, 그것은 DirectoryOperationException 예외 : "속성이 존재하거나 값이 지정되었습니다."

내가 피하려고하는 것은 전달되는 컬렉션의 모든 속성을 쿼리해야한다는 것입니다. 존재하는 경우 ReplaceDirectoryAttributeModification을 작성하십시오. 그렇지 않은 경우 Add을 대신 만드십시오. 내가 수확 할 수있는 것에서부터, PermissiveModifyControl은 그 일을하기로되어 있습니다.

PermissiveModifyControl이 여전히 DirectoryOperationException을 던지는 이유와 제대로 사용하는 방법에 대해 알아 보았습니까?

미리 감사드립니다. James

+1

+1 훌륭한 질문입니다. – geoffc

답변

3

몇 가지 실험을 한 후에 설명서가 오도 된 것으로 나타났습니다 ... 속성을 추가하고 싶지 않아 바꾸고 싶습니다 (DirectoryAttributeOperation.Replace). 속성이 존재한다면 그것은 물론 그것을 대체 할 것입니다. 속성이 존재하지 않으면 속성이 생성됩니다.

나머지 코드는 정확합니다.