想象一个Windows框,其中:
当用户向服务发出请求(在WCF基础结构之上)时,他使用NAT分配给目标计算机的外部地址。
我必须在WCF服务中编写一些代码,它必须知道机器中的几个NIC中的哪一个用于实际处理网络流量。此代码如何识别NIC不太重要 - 它可能是其MAC地址(最好),也可能是NIC的(内部)IP地址。
我该怎么做?
EDIT1
我会尝试提供问题背景。有两个代理人。两者都公开相同的WCF服务。此外,可以指示其中一个代理开始以下列方式探测网络:
绑定到UDP端口需要两个部分 - IP地址和UDP端口,其中IP地址可以是特定IP地址或*(绑定到与计算机关联的所有IP地址)。后一种选择对我们不利 - 我会省略原因。这给我们留下了前一个选项 - 绑定到特定的IP地址。但是,当代理B在NAT之后时,用于与WCF服务通信的IP地址是由NAT分配给代理的外部IP地址。另一方面,绑定需要相应的内部IP地址 - 如何获取它?
答案 0 :(得分:3)
你可以在WCF操作中检查OperationContext.Current.Channel.LocalAddress(它是一个EndpointAddress)吗?
作为旁注,获取远程地址可以通过以下方式完成:
OperationContext context = OperationContext.Current;
MessageProperties prop = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint =
prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string ip = endpoint.Address;
- larsw
答案 1 :(得分:-1)
获取MAC使用 System.Net.NetworkInformation.NetworkInterface.GetPhysicalAddress();
所有Nics: System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces();
找出真正的侦听IP地址是什么,你可以编写一个代码,在每个地址上监听你的端口并从代理模拟器中ping它以查看该地址是否有效。
干杯,
吉拉德