如何检查两个端点地址是否相同?

如何检查两个端点地址是否相同?

问题描述:

我的程序是一个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

你必须做一个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