2012-02-23 157 views
1

我的程序是一個WCF服務,它發佈了幾種方法並擁有多個客戶端。它將客戶列表存儲在數據庫中。在一些方法中,我需要從數據庫查詢調用者的數據。這question How can service know the caller?和鏈接的答案Get the Client’s Address in WCF顯示如何獲取調用者的IP。但是,我的客戶表中的地址字段通常不具有IP,但是類似於:如何檢查兩個端點地址是否相同?

http://localhost:80/ 
http://computerName:80/ 
http://computerName.domain.com:80/ 

哪些是有效的端點地址。讓我們想象我在鏈接的答案中使用解決方案,並獲得我的調用者的IP(例如http://192.80.212.21:80/)。但是在數據庫中,客戶端存儲爲http://computerName:80/如何檢查這兩個地址是否相同,以便我可以從數據庫中獲取相應的客戶端條目?

客戶端的數量非常小,因此重複數據庫中每一行的性能問題可以忽略不計。

+0

'http:// localhost:80 /'和'http:// computerName:80 /'是不一樣的。第一個不能在機器外部訪問。因此是不同的。確實是 – Aliostad 2012-02-23 13:51:43

+0

。但是,如果客戶端來自同一臺計算機,輸入地址的人可以輸入任意一個到數據庫,並且它的工作原理是一樣的。 – 2012-02-23 15:03:47

回答

0

你必須做一個DNS查找來確定是關聯客戶端的IP地址的主機名:

var clientEndpoint = OperationContext.Current 
    .IncomingMessageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; 
var clientHostName = Dns.GetHostEntry(clientEndpoint.Address).HostName; 
var clientPort = clientEndpoint.Port; 

var clientUri = new UriBuilder("http", clientHostName, clientPort).ToString(); 

在這一點上,你可以匹配所獲得的clientUri存儲在數據庫中的地址。

+0

你是什麼意思靜態? – 2012-02-23 15:04:04

+0

@LouisRhys [靜態IP地址](http://en.wikipedia.org/wiki/IP_address#Uses_​​of_static_addressing)直接關聯到網絡上的特定計算機。但是,這並不重要,因爲您可以通過DNS查找將IP地址與主機名相關聯。我糾正了我的答案。 – 2012-02-23 15:43:10