Active Directory (AD DS) には、「読み取り専用ドメイン コントローラー」 (RODC) の概念があります。おそらく下位互換性のために、デフォルトでは読み取り専用ドメイン コントローラーは無視されます。読み取り専用ドメイン コントローラーへの接続を許可することを明示的に指定する必要があります。
この C# コードでは、それが 2 か所で見られます。1 つは、新しいSystem.DirectoryServices.DirectoryEntryを作成する場合です。この問題は、RODC の使用を許可するSystem.DirectoryServices.AuthenticationTypes.ReadonlyServerフラグを設定することで簡単に解決できます。
私の質問は、 System.DirectoryServices.AccountManagement名前空間のクラスを使用する次のようなコードで同じことを達成する方法です。
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
using (UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(
ctx,
IdentityType.SamAccountName,
...))
{
// ...
}
このコードは読み取り専用ドメイン コントローラーを無視することがわかったためです。
(上記は、MSDN の「Visual C# General」フォーラムの「System.DirectoryServices.AccountManagement を介して C# アプリケーションから読み取り専用ドメイン コントローラー (RODC) に接続する際の問題」というタイトルのスレッドに投稿された質問とまったく同じであることに注意してください。)