0
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 にある場合、コードは正常に実行されると仮定するのは正しいですか?

4

1 に答える 1

0

いいえ、それは正しい仮定ではありません。ContextType.Machineは、ローカル アカウントで作業することを意味します。

Active PrincipalSearcherDirectory ではなく、ローカルの SAM データベースを検索することになります

于 2015-05-18T14:33:45.190 に答える