我有一個WCF服務,通過多個Web服務器上的IIS託管。我有一個日誌記錄方法,將調用記錄到數據庫,我想記錄哪個服務器正在執行調用。WCF:如何獲取主機IP或服務器名稱
有誰知道如何獲取WCF調用正在執行的主機服務器名稱或IP地址?
我有一個WCF服務,通過多個Web服務器上的IIS託管。我有一個日誌記錄方法,將調用記錄到數據庫,我想記錄哪個服務器正在執行調用。WCF:如何獲取主機IP或服務器名稱
有誰知道如何獲取WCF調用正在執行的主機服務器名稱或IP地址?
使用Dns.GetHostName(),因爲獲取計算機的名稱比主機IP好得多。考慮一下當你的主機有多個IP地址,有虛擬網卡(VMWare)的情況。
Dns.GetHostName()是我使用最多的。
這是我們的工作。確保你有一個對System.ServiceModel的引用。然後執行以下代碼在您的服務方法:
var context = System.ServiceModel.OperationContext.Current;
RemoteEndpointMessageProperty property = (RemoteEndpointMessageProperty)context.IncomingMessageProperties[RemoteEndpointMessageProperty.Name];
string externalIP = property.Address;
Environment.MachineName
確實axactly是
DNS主機名不起作用,因爲許多服務器有多個主機名,你不知道哪一個服務被調用。 IIRC,IIS可以根據指定的主機名稱調用不同的Web服務,從而使事情變得更糟。使用.Current很好,如果你沒有運行一個單一的實例,在這種情況下,你不總是有一個非空的上下文對象,這是我所有的上述情況。如果有人有什麼更堅實的,請分享:)
您可以使用下面的代碼來獲取服務器(主機)的當前基地址。
using System.ServiceModel;
var baseAddress = OperationContext.Current.Host.BaseAddresses[0].Authority;
它是客戶端IP地址,而不是主機。 – berdem 2012-02-22 13:50:40