Если вы всегда хотите выдать себя за клиента для всех операций, добавьте следующее к элементу <behavior>
, то есть после элемента <serviceMetadata>
:
<serviceAuthorization impersonateCallerForAllOperations="true" />
Если вы пытаетесь олицетворять на уровне приложения , то обычно вы не можете сделать это в WCF, поскольку WCF на самом деле не является частью конвейера ASP.NET.
Самый простой обходной путь - просто поместить приложение WCF в его собственный пул приложений и установить идентификатор процесса пула для пользователя, которого вы хотите выдать себя за роль.
Другой способ - включить режим совместимости ASP.NET, добавив его в <system.servicemodel>
:
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
Вы также иногда должны украсить свой сервис:
[AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
Но имейте в виду, что это ограничит вашу способность пользоваться многими другими более новыми функциями WCF, такими как привязки MSMQ или TCP. Я предпочитаю разделенный пул приложений.