gpt4 book ai didi

c# - 在 .Net 4.0 中,DirectorySearch 能否以允许我翻页的方式返回 LDAP 结果?

转载 作者:太空狗 更新时间:2023-10-29 20:25:17 26 4
gpt4 key购买 nike

我在 C# 中工作,并且正在尝试使用 DirectorySearch 来查询一个非常大的 Microsoft ActiveDirectory LDAP 服务器的组。

因此,在我的应用程序中,我将拥有一个具有搜索功能的分页组列表。自然地,我不想每次点击“下一页”时都将这些查询的整个结果集传递给我,从而打击我的 LDAP 服务器。

有没有一种方法可以使用 DirectorySearch 只检索单个任意页面的结果,而不是在一个方法调用中返回整个结果集?

类似问题:

存在很多这样的问题,有人询问分页(从 LDAP 服务器到应用服务器),并得到涉及 PageSize 和 SizeLimit 的响应。但是,这些属性只影响 C# 服务器和 LDAP 服务器之间的分页,最后,DirectorySearch 唯一相关的方法是 FindOne() 和 FindAll()。

我正在寻找的基本上是“FindPaged(pageSize, pageNumber)”(pageNumber 是非常重要的一点。我不只是想要前 1000 个结果,我想要(例如)第 100 个结果1000 个结果。应用程序不能等待 100,000 条记录从 LDAP 服务器传递到应用程序服务器,即使它们被分解成 1,000 条记录 block 。

我知道 DirectoryServices.Protocols 有 SearchRequest,它(我认为?)允许您使用“PageResultRequestControl”,它看起来像我正在寻找的东西(尽管它看起来像分页信息来自“cookies” ",我不确定我应该如何检索)。但是,如果有一种方法可以在不重写整个内容的情况下使用协议(protocol)来做到这一点,我宁愿不必这样做。

我无法想象没有办法做到这一点...即使 SQL 也有 Row_Number。

更新:PageResultRequestControl 无济于事 - 它是仅向前的和顺序的(您必须先调用并获取前 N 个结果,然后才能获取进行调用以获取结果 N+1 所需的“cookie” token )。

但是,cookie 似乎确实具有某种可重现的顺序......在我处理的结果集上,我一个一个地迭代结果,每次 cookie 都是这样出来的:

1: {8, 0, 0, 0}
2: {11, 0, 0, 0}
3: {12, 0, 0, 0}
4: {16, 0, 0, 0}

当我两个两个地迭代时,我得到了相同的数字 (11, 16)。这让我想到,如果我能弄清楚这些数字是如何生成的代码,我就可以创建一个 cookie ad-hoc,它会准确地为我提供我正在寻找的分页。

最佳答案

PageResultRequestControl 确实是执行此操作的方法,它是 LDAP 协议(protocol)的一部分。对不起,您只需要弄清楚这对您的代码意味着什么。应该有一种方法可以从你所在的地方使用它,但是,话虽如此,我在 Java 中工作,我只需要编写十几个请求控件和扩展操作类来与 JNDI 一起使用,所以你可能运气不好......或者你可能必须像我一样做。警告,ASN.1 解析紧随其后:-|

关于c# - 在 .Net 4.0 中,DirectorySearch 能否以允许我翻页的方式返回 LDAP 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7679556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com