将用户条目移动到Active Directory中的另一个容器条目:“存在命名违规”

时间:2013-12-18 10:46:31

标签: c# active-directory ldap

我无法将用户条目从一个容器条目移动到另一个容器条目

using (var newParent = GetEntry(destination, Configuration.ServerAddress, Configuration.UserName, Configuration.Password))
{
    _entry.MoveTo(newParent);
}

...

public static DirectoryEntry GetEntry(Guid guid, string serverAddress, string userName, string password)
{
    try
    {
        var id = guid.ToString().Replace("}", "").Replace("{", "");
        return new DirectoryEntry(String.Format("{0}<GUID={1}>", serverAddress, id), userName, password);
    }

    catch (Exception e)
    {
        if (e.HResult != Searcher.ENTRY_NOT_FOUND)
            throw new DirectoryServiceException(e);
    }
    return null;
}

必须将_entry('user@****.com')移至目的地“container@****.com'。由于我使用System.DirectoryServices命名空间,因此两者都是DirectoryEntry类型。

enter image description here

但是在调用MoveTo()方法时会出现DirectoryServicesCOMException,其中包含以下信息:

Message: There is a naming violation.
ExtendedErrorMessage: 00000057: LdapErr: DSID-0C090A8E, comment: Error in attribute conversion operation, data 0, v1db1
HResult -2147016649

任何人都知道可能导致此异常的原因吗?

2 个答案:

答案 0 :(得分:2)

原来,Path属性不能包含条目的GUID。由于我使用GUID从AD中检索条目,因此它看起来像:

LDAP://<domain>/<GUID=9908d4c1-0438-4d23-8828-f5876166c84f>

为了使其正常工作,您必须确保路径如下:

LDAP://<domain>/CN=container@blabla.com,CN=UnitTestContainer,DC=<domain>

我不知道为什么会这样。一些内部处理可能需要这条路径...如果有人知道如何让它与GUID一起工作,请告诉我。

答案 1 :(得分:2)

我知道这是一个较旧的帖子,但我想我在这里添加了我最近的经验,因为我遇到了这个限制。

Wodzu关于&#34的假设;可能需要一些内部处理的路径&#34;是对的。

以下文章提到了一个提示:

Using objectGUID to Bind to an Object

根据以上链接:&#34;通过使用对象GUID绑定获得的对象不支持以下IADsContainer方法:&#34;。 这包括&#34; MoveHere&#34;。 这里的代码示例是C ++,因此可能并不明显&#34;为什么&#34;这是在我们考虑System.DirectoryServices如何工作之前。

这个提示与优秀的目录服务编程指南(下面引用)相结合,为我们提供了一个更好的图片 - 本书提到了IADsContainer.MoveHere被使用&#34;引擎盖&#34; MoveTo()

您可以通过查看.NET的源代码来亲自看到这一点。 这里是一个示例路径,看看你克隆回购的位置(任何4.x版本在这里都非常相似):

corefx-master\src\System.DirectoryServices\src\System\DirectoryServices\DirectoryEntry.cs

enter image description here

图书: 卡普兰,乔;邓恩,瑞恩。 .NET Develper目录服务编程指南(Kindle Location 1719)。皮尔逊教育。 Kindle版。