1

我的程序是一个 WCF 服务,它发布了几种方法并有多个客户端。它将客户列表存储在数据库中。在某些方法中我需要从数据库中查询调用者的数据。这个问题 service 如何知道调用者?链接的答案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/如何检查这两个地址是否相同,以便我可以从数据库中获取相应客户端的条目?

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

4

1 回答 1

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的地址与存储在数据库中的地址进行匹配。

于 2012-02-23T14:07:05.013 回答