在WCF中获取服务器IP地址?

3
当服务器有多个IP地址时,如何获取用于请求的服务器地址
例如:
- 服务器有10.0.0.1和10.0.0.2两个地址。 - 在处理请求时,服务器服务需要知道客户端连接到它时使用的是10.0.0.1还是10.0.0.2。
目前我只发现:
- OperationContext.Current.EndpointDispatcher.EndpointAddressOperationContext.Current.Channel.LocalAddress 包含从 .config 文件中读取的地址(例如localhost)。 - OperationContext.Current.IncomingMessageProperties.Via 包含客户端用于连接到服务器的URL(但这可能只是来自客户端hosts文件的名称)。
编辑:仍在寻找解决方案...

你是指传入的客户端吗? - rerun
不,我需要服务器的 IP。例如,服务器有 10.0.0.1 和 10.0.0.2 - 客户端用什么地址连接服务器? - laktak
这是在负载均衡的情况下吗?这个服务器上有多个网络适配器吗? - rerun
是的,两者都需要。该服务具有一些维护功能,不能通过NLB调用。因为我无法绑定到特定的适配器(请参见http://stackoverflow.com/questions/2326122/limit-wcf-endpoint-to-node-address-in-a-nlb-cluster),所以我正在尝试在服务中处理此问题。 - laktak
1个回答

0

如果没有你的额外帮助和工作,我认为你无法得到这个。

客户端向URL发送消息-消息被序列化、发送、处理并返回。没有“持续连接”可以查询,服务器不会做任何事情告诉你。

您可以创建一个消息检查器扩展,该扩展可以在服务器端注册,并将服务器的本地IP写入标头字段,然后您可以在客户端上进行检查。

谷歌或必应搜索“WCF消息检查器”,您应该会找到很多结果-其中一些更好的:


抱歉,我的问题没有表达清楚 - 我需要服务器上的信息。请查看我的编辑。 - laktak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接