Windows身份验证WCF和ASP.Net MVC2:将用户AD信息提供给wcf webservice

时间:2011-08-11 11:27:30

标签: wcf asp.net-mvc-2 windows-authentication

你好StackOverflow和编程爱好者。我有一个问题,我正在尝试将我创建的MVC网站移动到测试服务器,以便用户可以开始测试......我遇到了一个我在开发网站时忽略的小问题。我的网站调用我写的一个服务,它接受服务调用者AD用户名并用它做一些后端工作......

    private string CallerNameOnly = string.Empty;
    private string CallerFullDomain = string.Empty;

    public ACOService()
    {
        this.CallerFullDomain = OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name.ToString();
        this.CallerNameOnly = this.CallerFullDomain.Substring(this.CallerFullDomain.IndexOf('\\') + 1);
    }

当我在本地计算机上进行开发并且我的用户名已经很好地传递到服务中时,这非常有效...但是,当我部署到我正在使用的服务器时,我很难复制相同的功能...出于某种原因,当前用户最终成为我的机器名... 现在,我似乎已将问题隔离到IIS 7中的一个设置,当更改时,会稍微更改我的网站的行为...如果我转到应用程序池高级设置,我从LocalSystem更改进程模型/标识字段,对任何其他身份的改变它改变了用户是谁...我的远程调试器一直在向我发出警告,所以我无法弄清楚用户名是什么,但是你明白了吗? 我的问题是,如何使用我的网站(使用Windows身份验证)获取用户的用户名来使用他用来访问我网站的用户名来调用我的网站服务?我想到获取用户名并将其直接传递给构造函数,即......

    public ACOService(string userID)
    {
        this.CallerNameOnly = userID;       
    }

但这会带来问题,因为我已经有一个带有字符串的构造函数。我想我不得不将构造函数放入我的合同中吗?无论如何,它如何在WCF中工作? 任何有关此问题的帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您需要在服务上模拟客户端。

http://msdn.microsoft.com/en-us/library/ms731090.aspx