Это странная проблема. Я передаю строки в мой сервис, и эта строка будет именем пользователя, вошедшего на мой сайт (через авторизацию 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 ?????