怎样才能连接到RootDSE的和/或System.DirectoryServices.Protoco

2019-10-18 21:15发布

使用的System.DirectoryServices,一个可以得到highestCommittedUSN这种方式:

using(DirectoryEntry entry = new DirectoryEntry("LDAP://servername:636/RootDSE"))
{
     var usn = entry.Properties["highestCommittedUSN"].Value;
}

不过,我需要使用System.DirectoryServices.Protocols,不利用ADSI获得从远程ADLDS此信息。 以下是什么,我试图做的简化代码示例:

using(LdapConnection connection = GetWin32LdapConnection())
{
     var filter = "(&(highestCommittedUSN=*))";
     var searchRequest = new SearchRequest("RootDSE", filter, SearchScope.Subtree, "highestCommittedUSN");
     var response = connection.SendRequest(searchRequest) as SearchResponse;
     var usn = response.Entries[0].Attributes["highestCommittedUSN"][0];
}

不幸的是这踢回一个“DirectoryOperationException:可分辨的名称包含无效语法。” 起初我想可能有一些错误GetWin32LdapConnection(),但该代码被称为在许多其他地方连接到该目录,永远不会出错了。

有任何想法吗?

Answer 1:

感谢您的想法,Zilog公司。 显然,连接到RootDSE的,你必须为根容器指定null。 我还切换过滤器的objectClass = *和搜索范围“基地”。 现在,它的作品!

using(LdapConnection connection = GetWin32LdapConnection())
{
 var filter = "(&(objectClass=*))";
 var searchRequest = new SearchRequest(null, filter, SearchScope.Base, "highestCommittedUSN");
 var response = connection.SendRequest(searchRequest) as SearchResponse;
 var usn = response.Entries[0].Attributes["highestcommittedusn"][0];
}

我希望这样可以节省别人在未来的一段时间。



文章来源: How does one connect to the RootDSE and/or retrieve highestCommittedUSN with System.DirectoryServices.Protocols?