NLog:在IIS中的WCF应用程序中记录调用该应用程序的用户

时间:2011-05-10 20:01:44

标签: .net wcf iis logging nlog

我有以下情况:

  • 作为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。 Credentials类中有一个NLog.Logger属性,但它是只读的。

有谁知道如何解决它?

2 个答案:

答案 0 :(得分:0)

您可能需要设置 impersonateCallerForAllOperations 属性

有关详细信息,请参阅MSDN:http://msdn.microsoft.com/en-us/library/ms731306.aspx

答案 1 :(得分:0)

如果您可以从代码中获取用户,则可以这样做:

using NLog.LayoutRenderers;

...

// Register ${myUser}, do this as soon as possible (e.g. app_start)
LayoutRenderer.Register("myUser", (logEvent) => someUser);

现在您可以在nlog config1中使用${myUser}