2012-09-25 4 views
0

활성 디렉터리에서 부서 목록을 사용하는 방법이 있습니다. 그러나 일부 (적어도 하나는 내가 아는)가 나타나지 않습니다. "EMP-Alumni Relations"는 현재 문제 해결 중입니다.Active Directory 부서 목록 가져 오기 특정 부서가 없습니다.

다음은 현재 사용중인 코드입니다. 잠재적 인 문제점을 누구든지 식별 할 수 있으면 감사하게 생각합니다. 나는 그 순간을 놓치고있다. 부서에있는 여러 사용자를 확인 했으므로 문제가되어서는 안된다는 것을 알고 있습니다.

ArrayList GetAdDepts () 
    { 
     DirectoryEntry myLdapConnection = SCDirectoryEntry.GetDirectoryEntry (); 
     DirectorySearcher search = new DirectorySearcher (myLdapConnection); 
     search.Filter = "(objectClass=user)"; 
     search.PropertiesToLoad.Add ("department"); 
     SearchResultCollection result = search.FindAll (); 
     ArrayList departments = new ArrayList (); 
     foreach (SearchResult depart in result) 
     { 
      DirectoryEntry directoryEntry = depart.GetDirectoryEntry (); 

      if (directoryEntry.Properties.Contains ("department")) 
      { 
       string dept = (string) depart.Properties [ "department" ] [ 0 ]; 
       if (dept.Trim ().StartsWith ("EMP-")) 
       { 
        if (!departments.Contains (dept)) 
        { 
         departments.Add (dept); 
        } 
       } 
      } 

     } 
     return departments; 
    } 

답변

2

1000 명이 넘는 사용자가 있습니까? 그렇다면 아마도 described in the answer to this question 한도를 치고있을 것입니다.

시도 설정 :

search.PageSize = ... some non-zero value ...; 

은 또한 당신이 그것을했던 using 문 예컨대 :

using (var search = new DirectorySearcher(myLdapConnection)) 
{ 
    search.Filter = "(objectClass=user)";   
    search.PropertiesToLoad.Add ("department");   
    search.PageSize = 1000; // any non-zero value will work 
    using (var result = search.FindAll ()) 
    { 
     ... 
     foreach (SearchResult depart in result)    
     {     
      using (var directoryEntry = depart.GetDirectoryEntry ()) 
      { 
       ... 
      } 
     } 
    } 
} 
+0

와 함께, 귀하의 일회용 객체 DirectorySearcher, SearchResultCollection, DirectoryEntry을 폐기해야합니다. 고맙습니다. 코드 팁에 감사드립니다. –

관련 문제