Здравствуйте, товарищи по 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?
Любая помощь с этой проблемой будет принята с благодарностью.