2010-01-06 2 views
0

지정된 Windows Server 2003 Active Directory 조직 구성 단위에서 사용자가 필요한 SharePoint 응용 프로그램을 개발 중입니다.AD 검색에 빠르게 응답 할 수 없습니다.

처음에는 DirectoryServices 개체에 대한 'Dispose'및 'Close'작업이 걱정되지 않았습니다. 이 시점에서 검색 작업은 빠르고 성공적이었습니다.

그러나 2ish 시도 후에 'Server is not operational'오류가 발생했습니다. 그리고이 오류는 전체 애플리케이션이 다른 AD 작업을 중지하는 것처럼 작동하지 못하게합니다.

그런 다음 모든 DirectoryEntry, DirectorySearcher 및 SearchResultCollection 개체에 명령문을 사용하여이 오류를 수정했습니다.

그렇다면 더 이상 '서버가 작동하지 않습니다'오류가 발생했습니다. 그러나 DirectorySearcher.FindAll 메서드를 사용하여 AD에서 사용자를 한 번 이상 검색하려고하면 첫 번째 메서드가 빠르고 성공적으로 처리되고 다른 개체는 더 느리게 성공적으로 처리됩니다. 그것은 다소 타임 아웃의 지속 시간을 필요로합니다. 이 천천히에 대해 제 상황을 도와주십시오.

+0

시스템 이벤트 로그에 Schannel 오류가 있습니까? AD (2000, 2003 etc.)의 버전은 무엇입니까? – DmitryK

+0

AD가 2003 년에 작동합니다. 이벤트 뷰어가 정상적으로 보입니다. –

답변

0

모든 것이 여기에 정상적인 것 같다 사전에

using (DirectoryEntry directoryEntry = new DirectoryEntry(connectionString, userName, password)) 
      { 
       using (DirectorySearcher search = new DirectorySearcher(directoryEntry)) 
       { 
        search.SearchScope = SearchLevel.OneLevel; 
        search.ReferralChasing = ReferralChasingOption.All; 
        search.Filter = filter; 
        search.SizeLimit = 200; 
        //Limits the property count for search result 
        SetUserDirectorySearcherPropertiesToLoad(search); 

        using (SearchResultCollection result = search.FindAll()) 
        { 
         foreach (SearchResult searchResult in result) 
         { 
          // Get user attributes 
         }}}} 

감사 : 여기

는 샘플 코드입니다. 나는 비슷한 것을 사용하고 있는데, 주목할만한 차이점은 DirectoryEvent의 생성자에 "propertiesToLoad"매개 변수를 전달하고 DirectorySearcher의 생성자에 필터를 전달한다는 것입니다.

다른 차이점은 DirectoryEntry에 "username"과 "password"를 사용하고 있다는 것입니다. 응용 프로그램 풀 ID를 사용하는 것이 좋습니다. 나는 일반적으로 이러한 호출에 대해 SPSecurity.RunWithElevatedPrivileges(method pointer)을 수행합니다.

+0

두 가지 방법을 시도했지만 전혀 영향을주지 않습니다. 응용 프로그램 풀 ID에는 모든 그룹에 도메인 구성원을 추가하는 것과 같이 Active Directory에 필요한 권한이 없습니다. 그래서 구성 파일에서 자격 증명을 가져와야합니다. –

+0

변수'connectionString'과'filter'가 어떻게 생겼는지 예제를 게시 할 수 있습니까? – naivists

+0

내 연결 문자열은 LDAP : // dcname/OU = ou1, OU = ou2, DC = dcname 내 필터는 (& (& ObjectClass = person)) (& (! memberOf = CN = Students, OU = UEPOU, OU = UEPOU, DC = lst, DC = local) (! memberOf = CN = 디렉터, OU = UEPOU, DC = userCountControl : 1.2.840.113556.1.4.803 : = 2))) 복잡한 것처럼 보일 수도 있지만 이러한 변수는 LDAP 브라우저에서 작동합니다. –

관련 문제