1

有没有办法规定 Win32 WinSockWSAIoctl函数SIO_GET_INTERFACE_LIST功能返回的网络接口的顺序?

背景:

我们有一个异构 CORBA 系统,其中在 Windows 上运行 ACE/TAO CORBA 实现的名称服务具有向其注册的基于 ACE/TAO 的服务,使用 IIOP.NET CORBA 实现的客户端需要使用这些服务。基于 IIOP.NET 的客户端位于单独的 Windows 机器上。ACE/TAO 机器有多个网络接口(客户端机器只能访问其中一个),因此有多个 IP 地址。

IIOP.NET 客户端可以连接到名称服务并检索它需要使用的已注册服务器 CORBA 对象的代理,但是当它尝试使用代理时会引发异常。

由于调试所花费的时间过多,我们得出的结论是,IIOP.NET 仅尝试连接到名称服务在请求服务时返回的 CORBA IOR 字符串中的第一个 IP 地址。IOR 字符串是对象的描述,包括其 IP 地址。大多数 CORBA 客户端将尝试使用 IOR 字符串中的所有地址与服务器对象连接,但看起来 IIOP.NET 并没有这样做。

生成 IOR 字符串的 ACE/TAO 代码使用WSAIoctl带有控制代码的 WinSock 命令SIO_GET_INTERFACE_LIST返回盒子上的网络接口列表,然后将它们全部添加到 IOR 字符串中。问题是第一个 IP 地址不在 IIOP 客户端使用的网络上,因此当 IIOP.NET 客户端尝试使用该 IP 地址连接到服务器对象时,它显然会失败并且永远不会尝试使用正确的 IP 地址。其他 CORBA 客户端(例如 ACE/TAO)会尝试所有 IP 地址,并且它们在此配置中工作。

由于我不是网络/CORBA 大神,因此尝试更改 ACE/TAO 或 IIOP.NET 对我来说是不现实的,我们有充分的理由在这个系统中有两个独立的网络,但如果第一个,默认 IP返回的地址WSAIOCtl是客户端需要的地址,这将解决问题,因为该 IP 地址将成为 IOR 字符串中的第一个 IP 地址,并且 IIOP.NET 将成功使用该 IP 地址。那么,是否有一种可靠的方法可以WSAIoctl以不同的顺序返回网络接口?不幸的是,我在 MSDN 上没有看到任何记录。

谢谢,

戴夫

4

1 回答 1

1

我找到了解决方案,我正在提供答案,以防其他人遇到这个问题。ACE/TAO orb 有一个命令行参数,可让您覆盖WSAIoctl. 命令行参数是-ORBListenEndpoints,它允许您提供以分号分隔的主机名和 IP 地址列表。谷歌-ORBListenEndpoints,你会发现确切的语法。使用接收该命令行参数的 ORB 初始化的任何服务器都将在指定的端点上侦听。我已经对此进行了测试,并且可以正常工作。

于 2009-12-17T17:02:45.023 回答