Previous Table of Contents Next


16.3.2 Array-based Interface


   The dce_ciop_array interface is defined by the DCE IDL specification shown below:

   [ /* DCE IDL */uuid(09f9ffb8-97ef-11cf-9c96-0800090b5d3e),/* 2nd revision */version(1.0)]interface dce_ciop_array{

    typedef struct { unsigned long length;[size_is(length),ptr] byte *data;

    } message_type;

void invoke

( [in] handle_t binding_handle, [in] message_type *request_message, [out] message_type *response_message);

} void locate ( [in] handle_t binding_handle, [in] message_type *request_message, [out] message_type *response_message);

   ORBs can implement the dce_ciop_array interface, identified by the UUID and version number shown, by using DCE stubs generated from this IDL specification, or by using lower-level APIs provided by a particular DCE-RPC implementation.

   All server ORBs and location agents implementing DCE-CIOP must listen for and handle requests made to the dce_ciop_array interface, and to maximize interoperability, should listen for requests arriving via all available DCE protocol sequences.

   Client ORBs can invoke OMG IDL operations over DCE-CIOP by performing locate and invoke RPCs on the dce_ciop_array interface.

   As with the dce_ciop_pipe interface, the first parameter of each dce_ciop_array RPC is a DCE binding handle that identifies the server process on which to perform the RPC. The remaining parameters are structures containing CDR-encoded messages. The request_message input parameters send a request message from the client to the server, while the response_message output parameters return a response message from the server to the client.

   The message_type structure used to convey messages is made up of a length member and a data member:

   The layering of DCE-CIOP messages on DCE-RPC using NDR arrays is illustrated in Figure 16-2:


   Figure 16-2 Array-based Interface Protocol Layering

   The NDR stream, formed by concatenating the PDU bodies, is interpreted as the NDR representation of the DCE IDL message_type structure. The length member is encoded first, followed by the data member. The data member is a full pointer, which is represented in NDR as a referent ID. In this case, this non-NULL pointer is the first (and only) pointer to the referent, so the referent ID is 1 and it is followed by the representation of the referent. The referent is a conformant array of bytes, which is represented in NDR as an unsigned long indicating the length, followed by that number of bytes. The bytes form the DCE-CIOP message.

   16.3.2.1 Invoke

   The invoke RPC is used by a DCE-CIOP client process to attempt to invoke a CORBA operation in the server process identified by the binding_handle parameter. The request_message input parameter contains a DCE-CIOP invoke request message. The response_message output parameter returns a DCE-CIOP invoke response message from the server to the client.

   16.3.2.2 Locate

   The locate RPC is used by a DCE-CIOP client process to query the server process identified by the binding_handle parameter for the location of the server process where requests should be sent. The request_message and response_message parameters are used similarly to the parameters of the invoke RPC.