.net 是否有一种方法可以使用LDAP仅获取前N个搜索结果?

.net 是否有一种方法可以使用LDAP仅获取前N个搜索结果?,.net,ldap,.net,Ldap,是否有一种好方法可以通过LDAP查询仅检索前N个结果,从而节省服务器负载并增加响应时间 例如,用例是基于AJAX的渐进式名称选择器(通过LDAP到HTTP网关,该网关希望将查询大小限制为支持LDAP目录),它将查找以用户迄今为止键入的字母开头的所有结果 使用.NET 4.5 System.DirectoryServices.Protocols的示例代码将受到欢迎,但这不是必需的,因为如果我知道实际的协议要求,我就可以知道如何发送请求。这正是Java的用途。这里面也有一个。这些东西为您实现了协议,

是否有一种好方法可以通过LDAP查询仅检索前N个结果,从而节省服务器负载并增加响应时间

例如,用例是基于AJAX的渐进式名称选择器(通过LDAP到HTTP网关,该网关希望将查询大小限制为支持LDAP目录),它将查找以用户迄今为止键入的字母开头的所有结果


使用.NET 4.5 System.DirectoryServices.Protocols的示例代码将受到欢迎,但这不是必需的,因为如果我知道实际的协议要求,我就可以知道如何发送请求。

这正是Java的用途。这里面也有一个。这些东西为您实现了协议,只提供了一个API。

EJP给出了一个很好的答案。请注意,虽然LDAP客户端可以很容易地将其自身限制为前N个结果,但从搜索返回的排序条目是不可重复的。也就是说,搜索结果中返回的条目顺序不仅没有定义,而且也不能保证重复,即使在几毫秒后的同一连接上也是如此。对排序敏感的LDAP客户端可能会遇到失败或无法解释的结果。

出于您的特定目的(自动完成建议),我将使用LDAP sizelimit,而不是分页结果。区别在于:

大小限制

您对前xx个对象感兴趣。你不在乎其余的,你也不需要其余的

分页结果

您对所有对象都感兴趣,但希望在每个页面上以xx个对象的批次/页面检索它们。您可能最终需要从服务器获取所有对象

这里明显的开销是,对于分页结果,服务器必须记住您的搜索状态,并在您请求下一页时适当地恢复搜索。由于这对于自动完成列表来说通常是不必要的(除非您想选择按需进一步扩展自动完成列表),您可以使用sizelimit而不是使用分页结果来节省服务器的一些额外负载

我不是.NET程序员,但谷歌发现了这一点,您可能会感兴趣:

有关更多详细信息,您还可以查看RFC页面(在那里搜索sizelimit):

这既不涉及获得分页结果所需的较低级别协议信息,也不涉及使用System.DirectoryServices.protocol实现它的.NET方法——javax资源对我没有好处。@SAJ14SAJ我被错误地认为是Java和JNDI,但在.NET中肯定有这样一种方法吗?如果是这样的话,它肯定会为您处理协议细节,这就是重点。是的,事实证明s.ds.p中有一个
PageResultRequestControl
;显然,对这一功能的支持并不普遍。我编辑了这篇文章,但它仍然不允许我删除否决票;很抱歉啊,我没有足够的代表在这里单方面编辑。@SAJ14SAJ自己修复了它。谢谢,我知道这一点;我的LDAP实用程序接口还根据需要为此目的创建
SortRequestControl
。此外,尽管我不会指望它,因为它可能会导致可怕的未来错误,但我的经验是,TDS实际上会以确定性顺序返回结果,可能是基于支持DB2数据库的索引。是的,我意识到这是一个未指定的实现细节。
System.DirectoryServices
System.DirectoryServices.Protocol
是非常不同的API。它们不相关。错误的API,请参阅我对关于
sizeLimit
的其他答案的评论。好的,那么,这个呢?第一次复制了错误的链接-现在它指向Protocols命名空间中的内置文档。无论如何,基于分页结果的搜索和大小受限的搜索在排序上没有区别。至于广告,它似乎在订购过程中是相当一致的。