HttpContext.Current.User не устанавливается после установки.NET Framework 4.5
Я использовал.NET 4.0 VS10. У меня были рабочие сервисы WCF, которые использовали аутентификацию форм. Я обновился до VS11, .NET 4.5.
Теперь мой HttpContext.Current.User является нулевым в запросе wcf. Я ввел куки от логина на этот запрос.
HttpRequestMessageProperty httpRequest;
...
httpRequest.Headers.Add(HttpRequestHeader.Cookie, cookie);
Есть идеи, как заставить это работать снова?
Уже есть
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
и
[AspNetCompatibilityRequirements(RequirementsMode = spNetCompatibilityRequirementsMode.Required)]
2 ответа
Если вы столкнулись с этой проблемой в одностороннем порядке (операции, помеченные [OperationContract (IsOneWay = true)]) контрактом операции WCF, вот причина этой проблемы. HttpContext является конструкцией asp.net. После успешного вызова односторонней операции модель сервиса отправляет обратно ответ 202 (принято) клиенту.
- В 4.5 asp.net удаляет HttpContext, так как ответ уже был отправлен обратно клиенту, который разработан.
- В 4.0 это просто счастливое совпадение, что этот неподдерживаемый сценарий сработал.
Так как мы нашли несколько отчетов клиентов по этому поводу, в обновлении.net 4.5.1 сделано причудливое исправление. Чтобы дать более подробную информацию об исправлении:
- Если ваш проект все еще нацелен на 4.0 и вы запускаете приложение на машине 4.5.1, тогда ваша проблема будет исправлена (внутренняя проверка на наличие целевой версии фреймворка).
- Если ваш проект перенаправлен на 4.5, то Httpcontext.Current.User снова станет нулевым по причинам, которые я упомянул выше. Попробуйте использовать OperationContext.Current.ServiceSecurityContext.WindowsIdentity, чтобы получить идентификатор пользователя вместо свойства HttpContext.Current.User. Это свойство не зависит от хоста и заполняется при аутентификации вашего клиента.
Здесь есть решение аналогичной проблемы:
добавлять
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
в ваш конфигурационный файл.