У меня следующий сценарий:
Развернутая служба 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
, но оно доступно только для чтения.
Кто-нибудь знает, как его решить?