如何解决“服务器不支持控件。 控制很关键。“Active Directory错误

当我尝试从基于角色的AD中获取所有用户时,我得到了exception:

System.DirectoryServices.Protocols.DirectoryOperationException:超出了大小限制

在这个线程的帮助下: LdapConnection SearchRequest抛出exception“超出大小限制我尝试实现分页。

现在我得到一个例外:

服务器不支持该控件。 控制至关重要。

关于如何解决它的任何想法? 我得到一个较小的基于角色的用户列表,没有分页。 谢谢。

更新:我发现代码检查AD是否支持分页iPlanet LDAP和C#PageResultRequestControl ,我得到的结果是支持分页。

确实,它有助于从AuthType.Basic进行更改,但是如果有人想让它使用AuthType.Basic,那么您需要确保将LDAP协议版本设置为3:

var connection = new LdapConnection(new LdapDirectoryIdentifier(server), null, AuthType.Basic); connection.Bind(new NetworkCredential(username, password)); connection.SessionOptions.ProtocolVersion = 3; 

我在这里找到了这个解决方案: https : //groups.google.com/d/msg/microsoft.public.active.directory.interfaces/x1ZiixXknqk/m7-Li21QBoIJ

响应线程分页LDap搜索而发布的解决方案失败,“请求的属性不存在”也帮助了我解决了我的问题。 我使用AuthType.Basic并将其更改为AuthType.Ntlm使分页代码运行正常。 我怀疑它会影响我所拥有的任何其他AD代码,但如果我发现需要注意的话,我会检查并发布。

谢谢。

我最近遇到过这个问题,即使我已经明确地将LDAP版本号设置为3并且正在使用NTML身份validation。

在我的情况下,有一个多域Active Directory域服务林,通过将用于建立LDAP连接的端口号从389更改为3268来解决问题。

事实certificate,这些端口具有非常特定的用途 –

389 – 从本地域控制器请求信息。 本地域控制器可以访问域中所有对象的完整属性列表,但是查询存储在另一个域上的对象需要引用追踪,这就是我看到“服务器不支持控件”错误的地方。

3268 – 此端口用于访问全局编录,这是整个林中所有对象的存储库。 它确实有其限制,因为全局编录仅存储已标记为要复制的属性。 另一个副作用是全局目录访问本地域控制器的性能要高得多,因为它不依赖于引用追逐工作。