C#学习教程:c #Active Directory服务findAll()仅返回1000个条目分享


c #Active Directory服务findAll()仅返回1000个条目

可能重复:
我可以从Asp.Net中的DirectorySearcher获取超过1000条记录吗?

我正在使用ADS Directory搜索器findAll()方法搜索现有登录(如下面的代码所示)。 似乎findall方法只返回1000个条目,尽管有更多的条目。 如何查找每次登录的所有()?

IList adslist = new List(); using (DirectoryEntry de = new DirectoryEntry("LDAP://armlink.com", null, null, AuthenticationTypes.Secure)) using (DirectorySearcher ds = new DirectorySearcher(de, "(objectclass=user)", new string[] { "samaccountname" })) foreach (SearchResult sr in ds.FindAll()) { string[] e = sr.Path.Split(new string[] { "LDAP://", "OU=", ",", "DC=", ".com", "/CN=" }, StringSplitOptions.RemoveEmptyEntries); ResultPropertyCollection pc = sr.Properties; adslist.Add(e[0] + "/" + pc["samaccountname"][0].ToString()); // Debug.WriteLine(adslist.Last()); } 

这是由服务器端限制造成的。 从DirectorySearcher.SizeLimit文档:

服务器在搜索中返回的最大对象数。 默认值为零,这意味着使用服务器确定的1000个条目的默认大小限制。

和:

如果将SizeLimit设置为大于服务器确定的默认值1000条目的值,则使用服务器确定的默认值。

基本上从这看起来,除非有一种方法可以改变服务器端的默认值,否则你将被限制为1000个条目。 指定一个PageSize可能会让你一次获取一个特定的数字, 总数大于1000 ……不确定。

顺便说一句,看起来你应该在SearchResultCollection周围有一个using指令:

 using (SearchResultCollection results = ds.FindAll()) { foreach (SearchResult sr in results) { ... } } 

有两种解决此限制的方法 – 有关详细信息,请参阅DirectorySearcher上的MSDN文档 :

处理需要超过1000个条目的情况的首选方法绝对是分页搜索 – 请参阅MSDN文档:

在服务器找到由PageSize属性指定的对象数之后,它将停止搜索并将结果返回给客户端。 当客户端请求更多数据时,服务器将从停止的位置重新启动搜索。

上述就是C#学习教程:c #Active Directory服务findAll()仅返回1000个条目分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/959876.html

发表评论

邮箱地址不会被公开。 必填项已用*标注