4

我希望我的请求通过特定的 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 做到这一点?

4

3 回答 3

2

这个问题的答案是它做不到。这是来自 Microsoft MVP 的答案


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

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


于 2010-09-15T19:35:19.327 回答
1

您是否尝试在服务器上制作类似于 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;
    }
于 2010-09-06T14:54:10.263 回答
0

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

route add 192.168.0.32 mask 255.255.255.255 192.168.175.30

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

于 2010-08-26T17:49:18.327 回答