0

私はすでにstackoverflowからリンクを試しました

私はSilverlightクライアントとwcfサービスを持っています。アプリケーションには3つの認証モードがあります

  1. Active Directory
  2. Windowsパススルー
  3. 専有-私は明らかにこれに問題はありません。(Active Directoryとウィンドウパススルーの違いは本当にわかりません。ウィンドウパススルーを除いて、両方に同じコードを使用します。現在のユーザーを取得し、ADの場合、アプリはユーザー名パスワードの入力を求めます)

private string GetCurrentUser()
{
    try
    {
        string result = WindowsIdentity.GetCurrent().Name;
        WindowsPrincipal wp = new WindowsPrincipal(WindowsIdentity.GetCurrent());
        result = wp.Identity.Name;
        if (result.Contains(@"\"))
        {
            int position = result.LastIndexOf(@"\") + 1;
            result = result.Substring(position);
        }
        return result;
    }
    catch (Exception ex)
    {
        return "";
    }
}

WindowsIdentityとWindowsPrincipalはどちらも、「DefaultAppPool」または現在のスレッドが実行しているAppPoolを返します。Environment.UserNameでも同じものを返します。

web.configでオンにする<identity impersonate ="true"/>と、Silverlightクライアントがwcfに接続できません。「見つかりません」エラーが発生します。だから、私は保つ必要があります<identity impersonate ="false"/>

必要なのは、現在ログオンしているユーザーだけです。これが難しいことを知りませんでした。

4

1 に答える 1

0

アプリケーションプールのIDを自分のユーザーアカウントに変更しましたが、機能しました。

  1. IISコンソールを開く
  2. [アプリケーションプール]を選択します。
  3. AppPoolを選択します(私の場合はDefaultAppPoolでした)。
  4. 右側のペインで、[詳細設定]をクリックします。
  5. 一般、CPU、プロセスモデルなどの設定にはさまざまなカテゴリがあります。
  6. [プロセスモデル]->[ID]で、右側の入力ボックスをクリックします。ボタンが表示されたら、それをクリックします。
  7. 2つのラジオボタン(ビルトインアカウントとカスタムアカウント)を含むダイアログボックスが開きます。
  8. カスタムアカウントを選択し、[設定]をクリックします。
  9. [資格情報の設定]ダイアログボックスが開きます。
  10. クレデンシャルを入力して、[OK]をクリックします。[ドメイン][ユーザー名]の入力が必要になる場合があります
  11. すべてのダイアログボックスで[OK]をクリックして、すべてを閉じます。
  12. 次に、アプリをテストします。WindowsIdentity.GetCurrent()。Nameは、アプリケーションプールに関連付けられたユーザー名を返す必要があります。
于 2012-07-26T21:15:41.810 に答える