.net NLog:记录在IIS中的WCF应用程序中调用该应用程序的用户
我有以下情况:.net NLog:记录在IIS中的WCF应用程序中调用该应用程序的用户,.net,wcf,iis,logging,nlog,.net,Wcf,Iis,Logging,Nlog,我有以下情况: 作为windows托管服务运行的已部署WCF服务。此WCF服务用于将特定事件记录到数据库(NLog v2)。此服务使用basicHttpBinding 在IIS下部署的web应用程序(不同的服务器)。应用程序池在网络服务凭据下运行。web应用程序身份验证是Windows集成的(Active Directory凭据) 每当我从控制台应用程序调用WCF时,我都可以从System.Threading.Thread.CurrentPrincipal.identity.Name获取用户
- 作为windows托管服务运行的已部署WCF服务。此WCF服务用于将特定事件记录到数据库(NLog v2)。此服务使用basicHttpBinding
- 在IIS下部署的web应用程序(不同的服务器)。应用程序池在网络服务凭据下运行。web应用程序身份验证是Windows集成的(Active Directory凭据)
System.Threading.Thread.CurrentPrincipal.identity.Name
获取用户标识;当我从web应用程序调用它时,我希望得到“DOMAIN\SERVER$”
作为线程标识名(按预期发生)
我的问题是:我想找到调用web应用程序的用户。我已经尝试在WCF服务合同中设置AspNetCompatibilityRequirements
属性,但是NLog中的${asp application}
、${aspnet user identity}
和${asp request}
参数被读取为null
。web应用程序中的HttpContext
正常,但不会发送到WCF。在NLog.Logger
类中有一个Credentials
属性,但它是只读的
有人知道如何解决吗?可能需要设置impersonateCallerForAllOperations属性
有关详细信息,请参见MSDN:如果可以从代码中获取用户,则可以执行以下操作:
使用NLog.LayoutRenderers;
...
//注册${myUser},尽快执行此操作(例如app_start)
LayoutRenderer.Register(“myUser”,(logEvent)=>someUser);
现在,您可以在nlog配置1中使用${myUser}