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

时间:2012-02-23 13:46:44

标签: .net wcf ip-address wcf-endpoint

我的程序是一个WCF服务,它发布了多个方法并拥有多个客户端。它存储数据库中的客户端列表。在某些方法中,我需要从数据库中查询调用者的数据。此question How can service know the caller?和关联的答案Get the Client’s Address in WCF显示了如何获取调用者的IP。但是,通常我的clients表中的地址字段没有IP,但是像:

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

哪些是有效的端点地址。让我们假设我在链接的答案中使用解决方案,并获得我的调用者的IP(例如http://192.80.212.21:80/)。但是在数据库中,客户端存储为http://computerName:80/如何检查这两个地址是否相同,以便从数据库中获取相应的客户端条目?

客户端数量非常少,因此迭代数据库中每一行的性能问题可以忽略不计。

1 个答案:

答案 0 :(得分: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与存储在数据库中的地址进行匹配。