簡體   English   中英

NLog:記錄在 IIS 中的 WCF 應用程序中調用該應用程序的用戶

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM