使用 System.DirectoryServices,可以通过这种方式获得最高的CommittedUSN:
using(DirectoryEntry entry = new DirectoryEntry("LDAP://servername:636/RootDSE"))
{
var usn = entry.Properties["highestCommittedUSN"].Value;
}
但是,我需要使用不利用 ADSI 的 System.DirectoryServices.Protocols 从远程 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() 可能有问题,但是在许多其他地方调用该代码以连接到目录并且永远不会出错。
有任何想法吗?