0

System.DirectoryServicesを使用してActive Directoryドメインサービス(ADDS)にアクセスしようとしています。 LDAPプロトコルを使用してSystem.DirectoryServices内のディレクトリ同期ArgumentNull例外

は、私は、このLDAPフィルタ(physicalDeliveryOfficeName = *)とオフィス設定値の属性を持つすべてのDirectoryEntriesを取得したいし、私は、ファイルに同期cookieを書きたいですただDirectorySynchronization msdn example article

に示す例のように、将来の参照のためにここに私のコードです:

using (DirectoryEntry de = new DirectoryEntry("LDAP://myDomain.com/OU=Test,DC=myDomain,DC=com")) 
     { 
      using (var ds = new DirectorySearcher(de)) 
      { 
       ds.PropertiesToLoad.Add("distinguishedName"); 
       ds.SearchScope = SearchScope.Subtree; 
       ds.Filter = "(physicalDeliveryOfficeName=*)"; 
       ds.DirectorySynchronization = new DirectorySynchronization(); 
       SearchResultCollection searchResultCollection = ds.FindAll(); 
       foreach (SearchResult result in searchResultCollection) 
       { 
        var dn = (string)result.Properties["distinguishedName"][0]; 
        //do Something 
       } 

       var cookie = ds.DirectorySynchronization.GetDirectorySynchronizationCookie(); 
       File.WriteAllBytes(@"location", cookie); 
      } 
     } 

たびに私はds.FindAll()を呼び出したときに、私はSystem.ArgumentNullExceptionを取得し、このコード

ds.DirectorySynchronization = new DirectorySynchronization(); 

を実行します。同じコード行にコメントするたびに、問題なく検索結果が得られます。

私は十分にはっきりと響きたいと思います。 何らかの理由で、私はこのフィールドにはほとんどドキュメントがないことがわかります。私は本当にこれの解釈を見つけることができません。

答えて

0

DirectorySynchronizationをドメインルートLDAPパスに割り当てる必要があり、組織単位などのサブディレクトリでは機能しません。

using(DirectoryEntry de = new DirectoryEntry("LDAP://myDomain.com/DC=myDomain,DC=com")){ 

//same code 

} 

これが問題を解決します。

OUのようなサブディレクトリの変更を追跡したい場合は、USNChangedを使用する必要があります。

関連する問題