У меня есть следующий сценарий:
Развернутая служба WCF, работающая как служба Windows. Эта служба WCF используется для регистрации определенных событий в базе данных (NLog v2). Этот сервис использует basicHttpBinding.
Развернутое веб-приложение (другой сервер) под IIS. Пул приложений работает с учетными данными NETWORK SERVICE. Аутентификация веб-приложения встроена в Windows (учетные данные Active Directory).
Всякий раз, когда я вызываю WCF из консольного приложения, я могу получить идентификатор пользователя из System.Threading.Thread.CurrentPrincipal.Identity.Name
; когда я вызываю его из веб-приложения, я ожидаю получить "DOMAIN\SERVER$"
в качестве имени идентификатора потока (что происходит, как и ожидалось).
Моя проблема: я хотел бы получить пользователя, который вызвал веб-приложение. Я уже пытался установить атрибут AspNetCompatibilityRequirements
в сервисном контракте WCF, но параметры ${asp-application}
, ${aspnet-user-identity}
и ${asp-request}
в NLog читаются как null
. HttpContext
в веб-приложении в порядке, но оно не отправляется в WCF. В классе NLog.Logger
есть свойство Credentials
, но оно доступно только для чтения.
Кто-нибудь знает, как это решить?