相关疑难解决方法(0)

我可以从ASP.NET中的DirectorySearcher获取超过1000条记录吗?

我刚刚注意到结果的返回列表限制为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# asp.net active-directory

68
推荐指数
1
解决办法
6万
查看次数

在.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
查看次数