如何在发出请求之前将WCF Http客户端绑定到特定的出站IPAddress

我希望我的请求通过特定的IP地址发出。 有没有办法在WCF中这样做。 我为什么需要这个的解释是有点长的啰嗦,所以我宁愿不进入那个。

这是示例代码

string ipAddress = "192.168.0.32"; IService service; ChannelFactory factory = new ChannelFactory(new BasicHttpBinding(), new EndpointAddress("http://" + IPAddress + ":6996/IService")); service = factory.CreateChannel(); service.Test(); 

这是一个示例场景,准确解释我正在寻找什么。 假设我的机器上有两个IP(192.168.0.30和192.168.0.31)。 它们都可以达到192.168.0.32。 如果我现在运行此代码,它将从我的任何IP(.30或.31)中获取IP(.32)。 我如何强迫它通过我的特定IP(比如.30)。 有什么方法可以使用WCF吗?

问题的答案是无法完成。 以下是Microsoft MVP的答案


所以你想让客户端机器主动选择一个网络adpater接口(安装在它上面)发出WCF请求? 我担心这不受WCF的控制,因为WCF只关注以下地址:

**当作为主机行事时,我们可以选择绑定到特定主机名/地址以侦听客户端请求**当作为客户端行为时,我们可以选择要发送请求的目标地址/主机名。


您是否尝试在服务器上创建类似于IP-Sec的内容,以便它只接受来自特定IP地址的请求?

在这种情况下,您需要实现IEndpointBehavior和IDispatchMessageInspector并且:

  public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) { RemoteEndpointMessageProperty remoteAddress = (OperationContext.Current.IncomingMessageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty); // validate ip here return null; } 

在我看来,你的问题应该通过在路由表中设置一个额外的死记硬背来解决。 尝试从以管理权限开始的命令提示符执行以下操作:

 route add 192.168.0.32 mask 255.255.255.255 192.168.175.30 

如果要另外保存路由add -p开关。