Directory

搜尋 Active Directory 帳戶時,System.Runtime.InteropServices.COMException:超出此請求的時間限制

  • September 5, 2013

在 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://social.technet.microsoft.com/wiki/contents/articles/5392.active-directory-ldap-syntax-filters.aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/ms677612%28v=vs.85%29.aspx

引用自:https://serverfault.com/questions/536607