2013-04-13 33 views
4

是否有一種很好的方法,只需要用LDAP查詢檢索前N個結果,以節省服務器上的負載並增加響應時間?有沒有辦法只通過LDAP獲得前N個搜索結果?

例如,用例是基於漸進式AJAX的名稱選擇器(通過LDAP到HTTP網關,它將要將查詢大小限制爲支持LDAP目錄),它將查找以用戶擁有的字母開頭的所有結果迄今鍵入。

使用.NET 4.5 System.DirectoryServices.Protocols的示例代碼將不勝感激,但不是必需的,因爲如果我知道實際的協議要求是什麼,我可以計算出如何發送請求。

回答

3

這正是Java PagedResultsControl的用途。還有一個在.NET。這些東西爲你實現協議,只是提供一個API。

+0

這既沒有解決獲取分頁結果所需的低層協議信息,也沒有解決使用System.DirectoryServices.Protocol實現它的.NET方法 - javax資源對我沒有好處。 – SAJ14SAJ

+0

@ SAJ14SAJ我被誤認爲是Java和JNDI,但在.NET中肯定存在這些中的一種?如果是這樣,它肯定會照顧你的協議細節,那就是整個問題。 – EJP

+0

是的,事實證明s.ds.p中有一個'PageResultRequestControl';顯然支持這個功能並不普遍。 – SAJ14SAJ

2

EJP很好的回答。請注意,雖然LDAP客戶端可以輕鬆地將其自身限制爲僅前N個結果,但搜索返回的訂購條目不可重複。也就是說,搜索結果中返回的條目順序不僅未定義,即使在相同的連接毫秒後也不保證重複。對訂購敏感的LDAP客戶端可能會遇到失敗或無法解釋的結果。

+0

謝謝,我知道這一點;我的LDAP實用程序接口還根據需要爲此目的創建'SortRequestControl'。此外,儘管我不會指望它,因爲它可能會導致可怕的未來錯誤,但我的經驗是,TDS確實會以確定性的順序返回結果,這可能是基於後備DB2數據庫的索引。是的,我意識到這是一個未指定的實現細節。 – SAJ14SAJ

0

爲了您的特定目的(自動填寫建議),我會使用ldap sizelimit而不是分頁結果。這裏的區別:

大小限制

您感興趣的第一個XX的對象。你不關心其餘的事情,你不需要休息。

分頁結果

你有興趣ALL對象,但你要找回它們分批/每單頁XX對象頁。您最終可能需要從服務器獲取所有對象。

這裏明顯的開銷是,對於分頁結果,服務器必須記住搜索的狀態並在請求下一頁時適當地恢復它。由於這通常對於自動完成列表來說是不必要的(除非您想要選擇按需進一步擴展自動完成列表),您可以使用sizelimit將服務器保存爲一些額外的負載,而不是使用分頁結果。

我不是.NET程序員,但谷歌發現這一點,它可能會感興趣的你:
system.directoryservices.directorysearcher.sizelimit

欲瞭解更多詳情,您還可以看到RFC網頁(搜索的sizeLimit那裏):
rfc1777

+0

'System.DirectoryServices'和'System.DirectoryServices.Protocol'是非常不同的API。他們不相關。 – SAJ14SAJ

+0

錯誤的API,並看到我的意見,關於'sizeLimit'的其他答案。 – SAJ14SAJ

+0

好的,那麼,這個怎麼樣? http://msdn.microsoft.com/zh-cn/library/system.directoryservices.protocols.searchrequest.sizelimit.aspx –

相關問題