Wie erfolgt die Re-Order-Schnittstellen können die Netzwerk zurück von WSAIoctl mit SIO_GET_INTERFACE_LIST Steuercode

StackOverflow https://stackoverflow.com/questions/1916452

  •  20-09-2019
  •  | 
  •  

Frage

Gibt es eine Möglichkeit, die Reihenfolge der Netzwerkschnittstellen durch die WSAIoctl Funktion SIO_GET_INTERFACE_LIST Funktionalität Win32 WinSock zurück zu diktieren?

Hintergrund:

Wir haben ein heterogenes CORBA-System bekam, wo ein Name-Service die ACE / TAO CORBA-Implementierung unter Windows hat ACE / TAO-basierte Dienste laufen bei ihm registriert, dass die Kunden die IIOP.NET CORBA-Implementierung verwenden müssen umgesetzt werden. Die IIOP.NET-basierten Clients sind auf einem separaten Windows-Rechner. Die ACE / TAO Maschine mehr Netzwerk-Schnittstellen (von denen nur einer ist mit dem der Client-Maschine) und somit mehr IP-Adressen.

Der IIOP.NET Client kann mit dem Name-Service verbinden und einen Proxy für das registrierten Server CORBA-Objekt abrufen, die sie verwenden muss, aber wenn es versucht, den Proxy zu verwenden es Ausnahmen auslöst.

Auf der Grundlage von viel zu viel Zeit damit verbracht Debuggen, haben wir zu dem Schluss gekommen, dass das Problem, dass IIOP.NET nur versucht, die ersten IP-Adresse in der CORBA IOR Zeichenfolge zu verbinden, dass der Namensdienst zurückkehrt, wenn für die gefragt Bedienung. Der IOR-String ist eine Beschreibung des Objekts, einschließlich der IP-Adresse (n). Die meisten CORBA-Clients versucht, mit dem Server-Objekt mit allen Adressen in dem IOR-String zu verbinden, aber es sieht aus wie IIOP.NET das nicht tun.

Der ACE / TAO Code, den das IOR-String generiert verwendet den WinSock WSAIoctl Befehl mit dem Steuercode SIO_GET_INTERFACE_LIST die Liste der Netzwerkschnittstellen auf dem Feld zurück und fügt sie dann alle in dem IOR-String. Das Problem ist, dass die erste IP-Adresse ist derjenige, der nicht im Netzwerk ist, dass das IIOP-Client verwendet, so dass, wenn die IIOP.NET Client versucht, auf das Serverobjekt verbinden mit, dass die IP-Adresse es nicht offensichtlich und versucht nie, die verwenden korrekte IP-Adresse. Andere CORBA-Clients wie ACE / TAO tun alle die IP-Adressen versuchen, und sie arbeiten in dieser Konfiguration.

Da ich kein networking / CORBA Gott bin, es ist für mich nicht realistisch, zu versuchen, ACE / TAO oder IIOP.NET zu ändern, und wir haben gute Gründe, zwei zu haben, getrennte Netzwerke in diesem System, aber wenn die ersten Standard, IP-Adresse zurück von WSAIOCtl derjenige war, dass die Bedürfnisse der Kunden, die das Problem lösen würden, da die IP-Adresse wäre dann die erste IP-Adresse in dem IOR-String werden und IIOP.NET verwenden würden, dass die IP-Adresse erfolgreich. So gibt es eine zuverlässige Art und Weise zu verursachen WSAIoctl die Netzwerkschnittstellen in einer anderen Reihenfolge zurückzukehren? Ich sehe nichts auf MSDN dokumentiert auf diesem, leider.

Danke,

Dave

War es hilfreich?

Lösung

Ich fand die Lösung, und ich bin die Bereitstellung der Antwort, falls jemand gegen diese aufkommt. Die ACE / TAO Kugel hat einen Befehlszeilenparameter, die Sie die Ergebnisse von WSAIoctl zurück kann außer Kraft setzen. Die Befehlszeilenparameter sind -ORBListenEndpoints und ermöglicht es Ihnen, eine durch Semikolons getrennte Liste von Hostnamen und IP-Adressen zur Verfügung zu stellen. Google -ORBListenEndpoints und Sie werden die genaue Syntax erfahren. Alle Server mit dem ORB initialisiert, dass die Befehlszeilenparameter empfängt auf dem angegebenen Endpunkt hören (s). Ich habe dies getestet und es funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top