2015-12-02 78 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過濾器。 –