Служба WCF принимает имя пользователя userPincipleNname вместо строки в качестве аргумента - PullRequest
1 голос
/ 29 сентября 2011

Это странная проблема. Я передаю строки в мой сервис, и эта строка будет именем пользователя, вошедшего на мой сайт (через авторизацию windows). Я получаю строку с моего сайта, используя

    HttpContext.User.Identity.Name.ToString()

Я анализирую его из домена и просто получаю идентификационные данные пользователя. И тогда я вызываю службу wcf, чей контракт похож на этот ...

    generalWCFContractImplementation(string userID);

Теперь, вы могли бы подумать, что это пройдет в строке, которую я отправил ... Однако это действительно не так. После некоторой отладки я обнаружил, что передаваемая строка - это userPrincipleName, который я использую для настройки соединения WCF! И с какой стати это так? Я проверяю весь код, чтобы увидеть, не случайно ли каким-либо образом изменить идентификатор пользователя, но как только я вхожу в функцию, я проверяю, каково значение идентификатора, и это 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;
        }
    }

Как видите, я передаю имя пользователя и затем задаю объект, который собираюсь передать, равным идентификатору пользователя. Дело в том, что userID - это либо applicationPoolID, но я предполагаю, что скорее всего это userPrincipleName (который может совпадать с applicationPoolIdentity ... Я не уверен, должны ли они быть одинаковыми или нет). Но это очень странно. Я знаю идею, почему на земле это будет передано, а не фактическое имя пользователя ... И да, я посмотрел на свой сайт, чтобы увидеть, что передается, и это действительно, userID ... Когда он попадает служба, однако, это userPrincipleName.

Confused ?????

...