2011-03-15 40 views
1

正確的客戶端IP地址在WCF我用下面的方法獲取客戶端IP:不能讓服務器端WCF

public static byte[] GetUserIP(OperationContext context) 
     { 
      var messageProperties = context.IncomingMessageProperties; 
      RemoteEndpointMessageProperty endpointProperty = 
       messageProperties[RemoteEndpointMessageProperty.Name] 
       as RemoteEndpointMessageProperty; 

      return GetIPFromString(endpointProperty.Address); 
     } 

我的機器有一些地方IPv4和這種方法工作,直到昨天..可能是我們網絡管理員改變了一些事情我不知道,但現在endpointProperty.Address返回「:: 1」而不是「xxx.xxx.xxx.xxx」。有人可以解釋什麼會導致這樣的事情?

回答

3

這是因爲您的機器現在使用IPv6環回而不是IPv4。

它也會影響Intranet IP地址,因爲您的管理員可能已經全面啓用了IPv6 - 因此,計算機A將使用它的IPv6地址向計算機B標識自己。

在公共環境中,在整個interweb轉移到IPv6之前不太可能導致問題。

無論哪種方式,您都應該確保您使用IPAddress中的方法來解析端點的IP,而不是手動啓動您自己的IP。我設置了一個數據庫列,用於跟蹤IP地址爲varchar(15);我也遇到了類似的問題。工作格里塔,直到我們內部發生同樣的事情,突然間所有我的請求日誌記錄開始打破內部請求!

+0

謝謝你的答案..雖然關於這個,但是:: 1對我來說似乎很陌生..它是否適合IPv6?127.0.0.1 ?! – 0x49D1 2011-03-15 12:32:37

+1

yup :: 1確實是ipv6 loopback。還有其他衆所周知的IPv6地址(但它們並沒有完全落空)。 – 2011-03-15 12:33:09