有没有办法规定 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 上没有看到任何记录。
谢谢,
戴夫