2009-04-17 137 views
14

我有一個WCF服務,通過多個Web服務器上的IIS託管。我有一個日誌記錄方法,將調用記錄到數據庫,我想記錄哪個服務器正在執行調用。WCF:如何獲取主機IP或服務器名稱

有誰知道如何獲取WCF調用正在執行的主機服務器名稱或IP地址?

回答

12

使用Dns.GetHostName(),因爲獲取計算機的名稱比主機IP好得多。考慮一下當你的主機有多個IP地址,有虛擬網卡(VMWare)的情況。

1

Dns.GetHostName()是我使用最多的。

5

這是我們的工作。確保你有一個對System.ServiceModel的引用。然後執行以下代碼在您的服務方法:

var context = System.ServiceModel.OperationContext.Current; 

RemoteEndpointMessageProperty property = (RemoteEndpointMessageProperty)context.IncomingMessageProperties[RemoteEndpointMessageProperty.Name]; 

string externalIP = property.Address; 
+4

它是客戶端IP地址,而不是主機。 – berdem 2012-02-22 13:50:40

1
Environment.MachineName 

確實axactly是

0

DNS主機名不起作用,因爲許多服務器有多個主機名,你不知道哪一個服務被調用。 IIRC,IIS可以根據指定的主機名稱調用不同的Web服務,從而使事情變得更糟。使用.Current很好,如果你沒有運行一個單一的實例,在這種情況下,你不總是有一個非空的上下文對象,這是我所有的上述情況。如果有人有什麼更堅實的,請分享:)

0

您可以使用下面的代碼來獲取服務器(主機)的當前基地址。

using System.ServiceModel; 

var baseAddress = OperationContext.Current.Host.BaseAddresses[0].Authority; 
相關問題