2015-12-02 53 views
0

我正在编写一个性能敏感的代码片段,它将查询LDAP目录,在该目录中找不到所请求的对象(用户或组)可能很常见。搜索LDAP无例外

我们使用System.DirectoryServices.Protocols.LdapConnection.SendRequest()来提交查询。

如果找不到组/用户,SendRequest()将抛出DirectoryOperationException。由于这是性能敏感,我真的想避免例外,因为处理它们的性能受到影响。

是否有一种替代方法来查询LDAP,使我可以得到一个空/虚假/空的收集结果,而不是一个异常?

(我没有看到任何明显的像TrySendRequest,但我不是很熟悉LDAP过滤器语法,所以我想也许还有什么我失踪)

+1

您是否试过[DirectorySearcher](https://msdn.microsoft.com/en-us/library/system.directoryservices.directorysearcher(v = vs.110).aspx)类? –

+0

我敢说,查询本身会比处理异常花费更多。如果你真的出于效率的最微小的一点,并且ldap不是太大:为什么不将有关信息和compary缓存在内存中? – Marged

+0

@Marged好了,这就是问题 - 它可能是一个非常大的LDAP目录。就像潜在的超过300,000个用户一样(它在一个产品中,而不是内部代码,所以我不能控制目录的大小/拓扑结构等) – JMarsch

回答

1

可以使用DirectorySearcher类。

这是FindAll方法返回一个空集合,如果它没有找到任何结果。

而且它的FindOne方法如果找不到匹配则返回null。

虽然我不确定性能。您需要测试以确定使用DirectorySearcher是否可以提高性能。

+0

我会研究这个。它似乎是针对Active Directory的。你知道它是否适用于所有符合RFC的LDAP服务器? (我们必须支持多个后端 – JMarsch

+0

@JMarsch,我不太确定,我只使用它在活动目录中 但是它需要的搜索过滤器是一个LDAP过滤器。 –