У меня есть log4net и я работаю с db logger для службы WCF. Если я включу следующее в каждом методе, правильное имя пользователя Windows (вызывающего) будет зарегистрировано:
ThreadContext.Properties("user") = Thread.CurrentPrincipal.Identity.Name
Если я использую OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name, я также получу правильное имя пользователя для записи в журнале.
Я пытаюсь удалить требование, чтобы установить это для каждого метода, установив значение на уровне GlobalContext в конструкторе класса обслуживания следующим образом:
Public Sub New()
GlobalContext.Properties("user") = OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name
log4net.Config.XmlConfigurator.Configure()
End Sub
Однако, похоже, это не работает согласованно, иногда в записях журнала указывается имя пользователя Windows вызывающего абонента, а иногда это учетная запись компьютера веб-сервера (DOMAIN \ server $). Эта проблема - проблема log4net или WCF? Как я могу заставить имя пользователя Windows вызывающего абонента регистрироваться, когда создается служба WCF?