Есть ли способ диктовать порядок сетевых интерфейсов, возвращаемых функциональностью функции функции Win32S WinSock SIO_GET_INTERFACE_LIST
?Как перенастроить сетевые интерфейсы, возвращаемые WSAIoctl с помощью управляющего кода SIO_GET_INTERFACE_LIST
фона:
Мы получили гетерогенную систему CORBA, где запуск службы имен/реализации TAO CORBA ACE на Windows, имеет ACE/TAO на основе сервисов, зарегистрированных с ним, что клиенты реализованы с помощью реализации IIOP.NET CORBA необходимо использовать. Клиенты на базе IIOP.NET находятся на отдельной машине Windows. Машина ACE/TAO имеет несколько сетевых интерфейсов (только один из которых доступен клиентской машине) и, следовательно, несколько IP-адресов.
Клиент IIOP.NET может подключиться к службе имен и получить прокси-сервер для зарегистрированного объекта CORBA сервера, который ему нужно использовать, но когда он пытается использовать прокси-сервер, он выдает исключения.
Основываясь на слишком продолжительном времени отладки, мы пришли к выводу, что проблема в том, что IIOP.NET пытается только подключиться к первому IP-адресу в строке IOR CORBA, возвращаемой службой имени при запросе обслуживание. Строка IOR - это описание объекта, включая его IP-адрес (ы). Большинство клиентов CORBA попытаются соединиться с объектом сервера, используя все адреса в строке IOR, но похоже, что IIOP.NET этого не делает.
Код ACE/TAO, который генерирует строку IOR, использует команду WinSock WSAIoctl
с управляющим кодом SIO_GET_INTERFACE_LIST
, чтобы вернуть список сетевых интерфейсов в поле, а затем добавляет их все в строку IOR. Проблема заключается в том, что первый IP-адрес является тем, который отсутствует в сети, которую использует клиент IIOP, поэтому, когда клиент IIOP.NET пытается подключиться к объекту сервера с использованием этого IP-адреса, он явно не работает и никогда не пытается использовать правильный IP-адрес. Другие клиенты CORBA, такие как ACE/TAO, делают все IP-адреса и работают в этой конфигурации.
Поскольку я не являюсь сетью/божеством CORBA, для меня нереально пытаться изменить ACE/TAO или IIOP.NET, и у нас есть веские причины иметь две разделенные сети в этой системе, но если во-первых, IP-адрес по умолчанию, возвращенный WSAIOCtl
, был тем, который нужен клиенту, который бы разрешил проблему, поскольку этот IP-адрес станет первым IP-адресом в строке IOR, и IIOP.NET будет успешно использовать этот IP-адрес. Итак, существует ли надежный способ вызвать WSAIoctl
для возврата сетевых интерфейсов в другом порядке? К сожалению, я не вижу в документах на MSDN ничего подобного.
Спасибо,
Dave