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

搜尋 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*))
)

謝謝

答案1

該查詢的格式不正確,並且包含一些冗餘和不正確的資訊。

我會指定 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 和使用帶有索引的,而 objectClass 是多值且沒有索引(Windows Server 2008 和使用帶有objectCategory 的篩選器的查詢將比具有objectClass 的類似篩選器更有效,Windows Server 2008 網域控制站(及更高版本)具有索引objectClass 屬性的特殊行為,您可以利用這一點。 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

相關內容