[英]NLog: Log the user who called the application in a WCF application in IIS
我有以下场景:
作为 Windows 托管服务运行的已部署 WCF 服务。 此 WCF 服务用于将特定事件记录到数据库 (NLog v2)。 此服务使用 basicHttpBinding。
在 IIS 下部署的 Web 应用程序(不同的服务器)。 应用程序池在 NETWORK SERVICE 凭据下运行。 Web 应用程序身份验证与 Windows 集成(Active Directory 凭据)。
每当我从控制台应用程序调用 WCF 时,我都可以从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: http : //msdn.microsoft.com/en-us/library/ms731306.aspx
如果你可以从代码中获取用户,你可以这样做:
using NLog.LayoutRenderers;
...
// Register ${myUser}, do this as soon as possible (e.g. app_start)
LayoutRenderer.Register("myUser", (logEvent) => someUser);
现在您可以在 nlog config1 中使用${myUser}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.