我的程序是一个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/
如何检查这两个地址是否相同,以便从数据库中获取相应的客户端条目?
客户端数量非常少,因此迭代数据库中每一行的性能问题可以忽略不计。
答案 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
与存储在数据库中的地址进行匹配。