System.DirectoryServices を使用すると、highestCommittedUSN を次のように取得できます。
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() に何か問題があるのではないかと思っていましたが、そのコードはディレクトリに接続するために他の多くの場所で呼び出され、エラーになることはありません。
何か案は?