WCF服务采用userPincipleNname而不是作为参数传递给字符串

时间:2011-09-29 11:32:26

标签: wcf wcf-binding wcf-security

这是一个奇怪的问题。我将字符串传递给我的服务,该字符串将是登录我网站的人的用户名(通过Windows授权)。我使用

从我的网站上获取字符串
    HttpContext.User.Identity.Name.ToString()

我从域中解析它并获得用户身份。然后我打电话给wcf服务,其合同与此类似......

    generalWCFContractImplementation(string userID);

现在,你会认为它会传递我发送它的字符串......然而,情况确实不是这样。在做了一些调试之后,我发现传入的字符串是我用来设置WCF连接的userPrincipleName!现在为什么它会这样做呢?我正在检查我的代码中的所有内容,看看是否以某种方式意外更改了userID,但是我在输入函数后立即检查ID的值是什么,并且它是userPrincipleName!我对这里发生的事情感到非常困惑。有没有人知道为什么会这样?我该如何解决这个问题?

感谢。

使用代码更新

    public string GetOwnedPopulations(string userID)
    {
        Log.TraceEvent(System.Diagnostics.TraceEventType.Information, string.Format("Entered Method GetOwnedPopulations() CallerNameOnly: {0}, userID: {1} CallerNameOnly==userID {2}", CallerNameOnly, userID, CallerNameOnly == userID), "General");
        this.CallerFullDomain = userID;
        this.CallerNameOnly = userID;// this.CallerFullDomain.Substring(this.CallerFullDomain.IndexOf('\\') + 1);
        string ans;
        Log.TraceEvent(System.Diagnostics.TraceEventType.Information, string.Format("Entered Method GetOwnedPopulations() CallerNameOnly: {0}, userID: {1} CallerNameOnly==userID {2}", CallerNameOnly , userID, CallerNameOnly==userID), "General");
        searchPopulationbyOwner oReq = new searchPopulationbyOwner();
        oReq.ownerName = this.CallerNameOnly;
        try
        {
            StringBuilder sbBuffer = new StringBuilder();
            PopulationManagementClient client = UPMC.ISD.EADIS.PopulationManagement.PopManSvc.Utils.GetClient(this.CallerNameOnly);
            searchPopulationbyOwnerResponse resp = client.searchPopulationbyOwner(oReq);

            Log.TraceEvent(System.Diagnostics.TraceEventType.Information, string.Format("Getting Null Values?: {0}", (resp == null ? ans="yes" : ans="no")), "General");

            XmlSerializer xs = new XmlSerializer(typeof(Population[]));
            System.IO.StringWriter sw = new System.IO.StringWriter(sbBuffer);
            xs.Serialize(sw, resp.populationList);


            string sPopulationtXML = sbBuffer.ToString();
            return sPopulationtXML;// client.searchPopulationbyOwner(oReq);
        }
        catch
        {
            throw;
        }
    }

如您所见,我传入用户名,然后我将要传递的对象设置为等于用户ID。问题是,userID是applicationPoolID,但我猜它更可能是userPrincipleName(它恰好与applicationPoolIdentity相同......我不确定它们是否必须相同或不相同)。但这很奇怪。我知道为什么在地球上会传入而不是实际的用户名...是的,我查看了我的网站以查看传入的内容,确实是用户ID ...当它点击时但是,该服务是userPrincipleName。

困惑?????

0 个答案:

没有答案