小编Chr*_*ass的帖子

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

我正在使用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条记录块.

我知道DirectoryServices.Protocols有SearchRequest,它(我认为?)允许你使用"PageResultRequestControl",它看起来像我正在寻找的东西(虽然它看起来像分页信息来自"cookies",我不确定我应该如何检索).但是,如果有一种方法可以做到这一点,而不是重写整个事物而不是使用协议,我宁愿不必这样做.

我无法想象没有办法做到这一点......甚至SQL都有Row_Number.

更新:PageResultRequestControl没有帮助 - 它只是前向和顺序(你必须调用并获得前N个结果才能获得调用获得结果N + 1所需的"cookie"令牌).

但是,cookie看起来确实有某种可重复的排序......在我正在研究的结果集上,我逐个遍历结果,每次cookie都出现了:

1: {8, 0, 0, 0}
2: {11, 0, 0, 0}
3: {12, 0, 0, 0}
4: {16, 0, 0, 0}
Run Code Online (Sandbox Code Playgroud)

当我逐两迭代时,我得到了相同的数字(11,16).这让我觉得,如果我能弄清楚这些数字是如何生成的代码,我可以创建一个ad-hoc cookie,这将给我一个我正在寻找的分页.

c# pagination web-services ldap .net-4.0

7
推荐指数
1
解决办法
2553
查看次数

标签 统计

.net-4.0 ×1

c# ×1

ldap ×1

pagination ×1

web-services ×1