Использование пространства имен 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
предназначен для предотвращения сбоя кода, если описание уже существует. Единственная информация о PermissiveModifyControl, которую я нашел, находится здесь:
http://msdn.microsoft.com/en-us/library/bb332056.aspx
которая гласит:
Запрос на изменение LDAP обычно не выполняется, если он пытается добавить атрибут, который уже существует, или если он пытается удалить атрибут, который не существует. При PermissiveModifyControl
операция изменения завершается успешно, не выдавая ошибку DirectoryOperationException
.
Однако, когда приведенный выше код попадает в SendRequest()
, он выдает DirectoryOperationException
: «Атрибут существует или ему присвоено значение».
Чего я пытаюсь избежать, так это необходимости запрашивать каждое свойство в передаваемой коллекции; если он существует, создайте Replace
DirectoryAttributeModification
; если это не так, создайте Add
. Из того, что я могу почерпнуть, PermissiveModifyControl
должен делать именно это.
Может кто-нибудь пролить свет на то, почему PermissiveModifyControl
все еще выбрасывает DirectoryOperationException
, и как правильно его использовать?
Заранее спасибо!
Джеймс