2

ActiveDirectoryからUserPrincipalを取得する際に問題が発生しました。まず、ローカル環境で使用しました(IISではなくASP.NET開発サーバーを使用)。

User usr = new User();
usr.SoeId = Request.ServerVariables["LOGON_USER"];
usr.IP = Request.ServerVariables["REMOTE_ADDR"];
usr.FirstName = UserPrincipal.Current.GivenName;
usr.LastName = UserPrincipal.Current.Surname;

そしてそれはうまくいきます。欲しいものを手に入れました。しかし、テスト環境にアプリケーションをインストールすると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが発生しました。ここから解決策を試しました。

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
{
    UserPrincipal up = UserPrincipal.FindByIdentity(pc, usr.SoeId);
    return up.DisplayName;
    // or return up.GivenName + " " + up.Surname;
}

しかし、それは機能しません。

Windows認証を使用しています。なりすましはtrueに設定されます。私を助けてください。

4

2 に答える 2

4

ApplicationPoolドメイン ユーザーを使用して実行するように ID を変更します。

iis 6 では、アプリケーション プールを右クリックし、Identityタブに移動して、プールを実行するドメイン ユーザーを設定します。

iis 7 では、アプリケーション プールを右クリックし、[詳細設定] を選択します。[プロセス モデル] の下で、Identityドメイン ユーザーを使用するように変更します。

ドメインユーザーを渡してに渡すこともできますPrincipalContest Constructor

using (PrincipalContext context = new PrincipalContext(
                                    ContextType.Domain,
                                    "name of your domain",
                                    "container of your domain",
                                    "user@domain", //create a user in domain for context creation purpose.. this username will be constant.. you can keep it in app config
                                    "password")){
    UserPrincipal up = UserPrincipal.FindByIdentity(pc, usr.SoeId);
    return up.DisplayName;
}

ドメイン名が のdom.com場合、コンテナは次のようDC=dom,DC=comになり、ユーザー名はuser@dom.comまたはとして指定する必要があります。dom\user

于 2012-10-02T15:37:29.697 に答える