我刚刚注意到结果的返回列表限制为1000.我的域(HUGE域)中有超过1000个组.如何获得超过1000条记录?我可以从以后的记录开始吗?我可以将其剪切成多次搜索吗?
这是我的查询:
DirectoryEntry dirEnt = new DirectoryEntry("LDAP://dhuba1kwtn004");
string[] loadProps = new string[] { "cn", "samaccountname", "name", "distinguishedname" };
DirectorySearcher srch = new DirectorySearcher(dirEnt, "(objectClass=Group)", loadProps);
var results = srch.FindAll();
Run Code Online (Sandbox Code Playgroud)
我试过设置srch.SizeLimit = 2000; ,但这似乎不起作用.有任何想法吗?
我正在使用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,这将给我一个我正在寻找的分页.