0

我已经尝试过来自 stackoverflow 的链接

我有一个 silverlight 客户端和 wcf 服务。该应用程序具有3种身份验证模式

  1. 活动目录
  2. Windows 直通
  3. 专有的-显然我对这个没有问题。(我真的不知道活动目录和窗口传递之间有什么区别。我只是对两者使用相同的代码,除了窗口传递我得到当前用户和 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 返回相同。

当我打开<identity impersonate ="true"/>web.config 时,silverlight 客户端无法连接到 wcf。它收到“未找到”错误。所以,我需要保持<identity impersonate ="false"/>

我只需要当前登录的用户,我不知道这有这么难。

4

1 回答 1

0

我将应用程序池上的身份更改为我自己的用户帐户并且它有效。

  1. 打开 IIS 控制台
  2. 选择应用程序池。
  3. 选择 AppPool(在我的例子中是 DefaultAppPool)。
  4. 在右侧窗格中单击高级设置。
  5. 有不同类别的设置,例如常规、CPU、进程模型。
  6. 在Process Model -> Identity下点击右侧输入框,出现一个按钮,点击。
  7. 它会打开一个带有 2 个单选按钮(内置帐户和自定义帐户)的对话框。
  8. 选择自定义帐户并点击设置。
  9. 设置凭据对话框打开。
  10. 输入您的凭据并点击确定。您可能需要输入 [域][用户名]
  11. 对所有对话框点击确定以关闭所有内容。
  12. 现在测试您的应用程序,WindowsIdentity.GetCurrent().Name 应该返回与应用程序池关联的用户名。
于 2012-07-26T21:15:41.810 回答