NLog: Журнал пользователя, который вызвал приложение в приложении WCF в IIS - PullRequest
6 голосов
/ 11 мая 2011

У меня есть следующий сценарий:

  • Развернутая служба 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, но оно доступно только для чтения.

Кто-нибудь знает, как это решить?

1 Ответ

0 голосов
/ 01 сентября 2012

Возможно, вам нужно установить impersonateCallerForAllOperations атрибут

Подробнее см. В MSDN: http://msdn.microsoft.com/en-us/library/ms731306.aspx

...