using (PrincipalContext Context = new PrincipalContext(ContextType.Domain, DomainURL, UserName, Password))
{
UserPrincipal Account = new UserPrincipal(Context);
Account.GivenName = strFirstName;
Account.Surname = strLastName;
PrincipalSearcher srch = new PrincipalSearcher(Account);
foreach (var principal in srch.FindAll())
{
var p = (UserPrincipal)principal;
String FirstName = p.GivenName;
String LastName = p.Surname;
}
}
上記のコードを使用して Active Directory をクエリし、プリンシパル コンテキスト コンストラクターで渡されたユーザー名 (アカウント) がターゲット ドメイン (クエリ対象のドメイン) との信頼関係がないドメインにある場合、以下のエラーが発生します。
System.DirectoryServices.AccountManagement.PrincipalServerDownException: サーバーに接続できませんでした。---> System.DirectoryServices.Protocols.LdapException: LDAP サーバーを利用できません。
PrincipalContext コンストラクトが変更された場合、
using (PrincipalContext ctx = new PrincipalContext(ContextType.Machine))
クライアントがターゲット ドメインにある限り、コードは正常に実行されるでしょうか?
UserName と Password を含む最初のコードが、ドメイン B でユーザー情報を検索しようとしているドメイン A のクライアントによって呼び出されたと仮定します。ここでは、使用されたアカウントがドメイン A にあり、ドメイン B との信頼関係がないため、コンテキストの確立に失敗しました。
ContextType を Machine に変更し、コードを呼び出すクライアントがドメイン B にある場合、コードは正常に実行されると仮定するのは正しいですか?