尝试扩展OU主体时查询过滤器ArgumentException

时间:2011-12-08 20:13:00

标签: .net c#-4.0 active-directory directoryservices

我尝试使用下面的代码为organizationalUnit创建主体扩展

[DirectoryRdnPrefix("OU")]
[DirectoryObjectClass("organizationalUnit")]
public class OrganizationalUnitPrincipal : Principal
{
    public OrganizationalUnitPrincipal(PrincipalContext Context_p)
    {
        PropertyInfo contextRaw = this.GetType().BaseType.GetProperty("ContextRaw",
            BindingFlags.Instance | BindingFlags.NonPublic);
        contextRaw.SetValue(this, Context_p, null);
    }
}

但它会引发以下错误:

System.ArgumentException: Persisted Principal objects cannot be used as query filters.

当我尝试检索organizationalUnit属性和属性时,会发生此错误。

这可以吗?

我希望与此页面http://msdn.microsoft.com/en-us/site/bb384372

上的展示相同

1 个答案:

答案 0 :(得分:0)

从理论的角度来看,我认为你想做的事没有意义。在你指出的文章中对此进行了解释,但并不是那么清楚。 Principal的概念基于Directory Schema描述您可以添加到ActiveDirectory的对象。

可以扩展Principal,AuthenticablePrincipal,UserPrincipal,ComputerPrincipal和GroupPrincipal类,以创建扩展对象模型的自定义对象

但是在LDAP中,在Active-Directory中就是这种情况,类organizationalUnit不是user类的子类,而只是top类的子类。

换句话说:从概念的角度来看,你可以注意到Principal是一种用户(在Microsoft的观点中,是的计算机是用户,他们像用户一样在域上打开会话)和{ {1}}是一种组织框(如文件系统中的目录),因此第二个框不会扩展第一个框。


被修改

这是DirectoryEntry的子类,可以执行您想要的操作:

organizationalUnit