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, 이름 및 이메일로 검색 "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을 지정하겠습니다. 그렇게 하면 objectCategory=person에 포함되어 있으므로 objectClass=user가 필요하지 않습니다.

다음을 시도해 보세요.

(|
  (&(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

관련 정보