搜尋 Active Directory 帳戶時,System.Runtime.InteropServices.COMException:超出此請求的時間限制
在 AD 中搜尋 LDAP 使用者時出現錯誤。如果我限制 DirectorySearcher.SizeLimit = 1,那麼我會得到結果(返回 1 個結果)。但是當我將 SizeLimit 增加到超過 1(SizeLimit = 2 也)時,我收到“超出此請求的時間限制”錯誤。請讓我知道如何調試此錯誤以及我收到此錯誤的可能情況是什麼。
另請注意,僅當我的 DirectorySearcher.Filter 具有 ID、名稱、電子郵件時才會出現錯誤。如果我僅按名稱、ID 或電子郵件單獨搜尋,我不會收到任何超時錯誤並且我會收到結果。
使用 ID、名稱和電子郵件過濾搜尋“a”(這會引發超時錯誤):
(| (&(|(objectClass=person)(objectCategory=user))(!objectCategory=computer)((|(samAccountname=a*)(givenname=a*)(mail=a*)))) (&(|(objectCategory=group)(objectClass=groupOfUniqueNames)(objectClass=groupOfNames))(!objectCategory=computer)(cn=a*)) )
使用 ID 過濾搜尋“a”(這很好用):
(| (&(|(objectClass=person)(objectCategory=user))(!objectCategory=computer)(samAccountname=a*)) (&(|(objectCategory=group)(objectClass=groupOfUniqueNames)(objectClass=groupOfNames))(!objectCategory=computer)(cn=a*)) )
謝謝
該查詢格式不正確,並且包含一些冗餘和不正確的資訊。
我會指定 objectCategory=person。如果這樣做,則不需要 objectClass=user,因為它包含在 objectCategory=person 中。
你可能想試試這個:
(| (&(objectCategory=person)(|(samAccountname=a*)(givenname=a*)(mail=a*))) (&(|(objectCategory=group)(objectClass=groupOfUniqueNames)(objectClass=groupOfNames))(cn=a*)) )
另請注意:
“…如果您在使用 objectCategory 和 objectClass 之間進行選擇,建議您使用 objectCategory。這是因為 objectCategory 是單值和索引的,而 objectClass 是多值的並且沒有索引(Windows Server 2008 和上面)。使用帶有 objectCategory 的過濾器的查詢將比帶有 objectClass 的類似過濾器更有效。Windows Server 2008 域控制器(及更高版本)具有索引 objectClass 屬性的特殊行為。如果您的所有域控制器是 Windows Server 2008,或者如果您在查詢中指定了 Windows Server 2008 域控制器。"
http://msdn.microsoft.com/en-us/library/windows/desktop/ms677612%28v=vs.85%29.aspx