| Summary |
TAG_ALTERNATE_IIOP is a component added in IIOP 1.2 to allow IORs to contain an alternate location for a service that a client could attempt to access if a primary location is unavailable. Previous to this in IIOP 1.1 IORs would contain entire new profiles and hence be larger. This article details the behaviour of Orbix 3.3 with these. |
| Environment |
Orbix 3.3 All Supported Operating Systems
|
| Question/Problem Description |
An Orbix client receives a communication failure while connecting to a service that is available on the TAG_ALTERNATE_IIOP address, but not on the primary location in its IOR.
|
| Clarifying Information |
To test this properly with an Orbix 3.3 client an IOR is needed with a primary location that is unavailable and a TAG_ALTERNATE_IIOP address that is available. This IOR for example points to a host called fake in the primary location and localhost in the TAG_ALTERNATE_IIOP component:
IOR:010000001c00000049444c3a53696d706c652f53696d706c654f626a6563743a312e300001000000000000008e000000010102000500000066616b650000d2041b0000003a3e0231310c00000000a0990000d9c5810c08000000000000000000040000000300000014000000010000000a0000006c6f63616c686f737400d204000000000800000001000000415f544901000000180000000100000001000100000000000001010001000000090101000600000006000000010000001100
Here is the same IOR in IIOP 1.1 using profiles rather than components to expose the secondary location:
IOR:010000001c00000049444c3a53696d706c652f53696d706c654f626a6563743a312e3000020000000000000072000000010101000500000066616b650000d2041b0000003a3e0231310c000000007c9d0000296c20800800000000000000000003000000000000000800000001000000415f54490100000018000000010000000100010000000000000101000100000009010100060000000600000001000000110000000000000076000000010101000a0000006c6f63616c686f737400d2041b0000003a3e0231310c000000007c9d0000296c20800800000000000000000003000000000000000800000001000000415f544901000000180000000100000001000100000000000001010001000000090101000600000006000000010000001100
|
| Error Message |
When CORBA::Orbix.setDiagnostics(3) is set, the following output is observed for the IOR with the TAG_ALTERNATE_IIOP:
>client.exe [IT_HAL_InetAddr::get_addr_info_internal()]: lookup using getaddrinfo() failed, host: fake, port (str): 0 return code: 11004, meaning: The requested name is valid, but no data of the requested type was found. [IT_HAL_InetAddr::get_addr_info_internal()]: lookup using getaddrinfo() failed, host: fake, port (str): 0 return code: 11004, meaning: The requested name is valid, but no data of the requested type was found. Getaddrinfo failed, host name: :, port (str): 1234, error code: Unknown Winsock error., throwing CORBA::COMM_FAILURE Exception [IT_OrbixTCP_IPvX_SockLayer::startConnection()]: getaddrinfo caused SE!: 10088-- Communication failure - TCP/IP Socket interface failure Reason: Unknown Winsock error. [Completion status : COMPLETED_NO]
Unexpected system exception 10088-- Communication failure - TCP/IP Socket interface failure Reason: Unknown Winsock error. [Completion status : COMPLETED_NO]
|
| Defect/Enhancement Number |
|
| Cause |
Orbix 3.3 does not fully support IIOP 1.2 and while it will read in an IOR and invoke on it, it will not be aware of the extra components, hence this is expected behaviour. |
| Resolution |
Get the server to publish a multi-profile IIOP 1.1 IOR, this will be understood by an Orbix 3.3 client.
|
| Workaround |
From Orbix 3.3.12 IPv6 is supported and uses the TAG_ALTERNATE_IIOP location to store and receive this information, by enabling IPv6 support Orbix 3.3 will look at this location and expect an IPv6 IOR. After failing to connect to the location based on IPv6 it will revert to IPv4 for the connection and will work then. Note, the primary location will always be ignored though. IPv6 support can be enabled by setting Orbix.IT_ENABLE_IPV6 = "TRUE" in the Orbix3.cfg. |
| Notes |
The output from an Orbix 3.3 client using an IIOP 1.1 IOR with multiple profiles would be:
C:\\apps\\Orbix\\3.3.12-VS10-x32\\demos\\common\\Simple.6.3.6>client.exe [IT_HAL_InetAddr::get_addr_info_internal()]: lookup using getaddrinfo() failed, host: fake, port (str): 0 return code: 11004, meaning: The requested name is valid, but no data of the requested type was found. [IT_HAL_InetAddr::get_addr_info_internal()]: lookup using getaddrinfo() failed, host: fake, port (str): 0 return code: 11004, meaning: The requested name is valid, but no data of the requested type was found. Getaddrinfo failed, host name: >, port (str): 1234, error code: Unknown Winsock error., throwing CORBA::COMM_FAILURE Exception [IT_OrbixTCP_IPvX_SockLayer::startConnection()]: getaddrinfo caused SE!: 10088-- Communication failure - TCP/IP Socket interface failure Reason: Unknown Winsock error. [Completion status : COMPLETED_NO]
[ 11:54:28.312 40156@nbdubmmurphy02 New IIOP Connection (localhost:1234) ] [ 11:54:28.314 40156@nbdubmmurphy02 Outgoing IOP(11) Request to 1234@localhost for operation 'call_me' ] [ 11:54:28.317 40156@nbdubmmurphy02 Incoming IOP(11) Reply (NO_EXCEPTION) from 1234@localhost ]
The output from an Orbix 3.3 client using an IIOP 1.2 IOR and the workaround of enabling IPv6 would be:
C:\\apps\\Orbix\\3.3.12-VS10-x32\\demos\\common\\Simple.6.3.6>client.exe [ 10:42:57.306 3752@nbdubmmurphy02 Retrying connection to host `localhost' port 1234] [ 10:43:00.307 3752@nbdubmmurphy02 Retrying connection to host `localhost' port 1234] [ 10:43:03.308 3752@nbdubmmurphy02 Retrying connection to host `localhost' port 1234] [ 10:43:06.313 3752@nbdubmmurphy02 Retrying connection to host `localhost' port 1234] [ 10:43:09.314 3752@nbdubmmurphy02 Retrying connection to host `localhost' port 1234] [ 10:43:12.333 3752@nbdubmmurphy02 Retrying connection to host `localhost' port 1234] [ 10:43:15.343 3752@nbdubmmurphy02 Retrying connection to host `localhost' port 1234] [ 10:43:18.344 3752@nbdubmmurphy02 Retrying connection to host `localhost' port 1234] [ 10:43:21.353 3752@nbdubmmurphy02 Retrying connection to host `localhost' port 1234] [ 10:43:24.356 3752@nbdubmmurphy02 Retrying connection to host `localhost' port 1234] [ 10:43:26.357 3752@nbdubmmurphy02 New IIOP Connection (localhost:1234) ] [ 10:43:26.367 3752@nbdubmmurphy02 Outgoing IOP(11) Request to 1234@localhost for operation 'call_me' ] [ 10:43:26.376 3752@nbdubmmurphy02 Incoming IOP(11) Reply (NO_EXCEPTION) from 1234@localhost ]
|
| Attachment |
|