System.DirectoryServices中的目录同步ArgumentNull异常

时间:2017-09-06 11:38:35

标签: c# .net directoryservices directoryentry directorysearcher

我尝试使用System.DirectoryServices .NET Framework类库访问Active Directory域服务(ADDS)。

使用LDAP协议,我希望使用此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.DirectorySynchronization = new DirectorySynchronization();

每当我调用 ds.FindAll()时,我都会收到System.ArgumentNullException。知道每当我评论同一行代码时,我都会得到一个没有问题的搜索结果。

我希望听起来很清楚。 出于某种原因,我发现这个领域的文档很少。我真的无法找到解释。

1 个答案:

答案 0 :(得分:0)

必须将DirectorySynchronization分配给域根LDAP路径,并且不能像组织单位那样使用子目录。

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

//same code

}

这将解决问题。

如果有人想跟踪OU这样的子目录中的更改,他们应该使用 USNChanged。