代码之家  ›  专栏  ›  技术社区  ›  Mark

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

  •  4
  • Mark  · 技术社区  · 16 年前

    我希望我的请求通过特定的IP地址发出。有没有办法在WCF中做到这一点。我为什么需要这个的解释有点冗长,所以我不想谈这个。

    string ipAddress = "192.168.0.32";
    IService service;
    ChannelFactory<IOmlService> factory = new ChannelFactory<IService>(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有什么方法可以做到这一点吗?

    3 回复  |  直到 13 年前
        1
  •  2
  •   Mark    16 年前

    这个问题的答案是,这是做不到的。以下是微软MVP的答案


    所以您想让客户端机器主动选择一个网络适配器接口(安装在其上)来发送WCF请求吗?恐怕这超出了WCF的控制范围,因为WCF只关注以下地址:

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


        2
  •  1
  •   Aliostad    16 年前

    您是否正在尝试在服务器上创建类似于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;
        }
    
        3
  •  0
  •   Oleg    16 年前

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

    route add 192.168.0.32 mask 255.255.255.255 192.168.175.30