处理来自 CORBARequest 节点的响应

配置 CORBARequest 节点以定义将响应发送到的位置。

准备工作

关于此任务

CORBARequest 节点有三个输出终端:
  • Out:针对于成功调用操作。
  • Error:如果发生 CORBA 系统异常或用户定义的异常。
  • Failure:如果节点中发生故障;例如,如果节点无法与命名服务通信或者收到不正确的消息。
您可以通过在结果选项卡上配置输出数据位置属性,选择要向其发送响应的位置。 此属性指定 CORBARequest 节点将输出放入的消息树位置。 输出将置于 DataObject 域下。 有关更多信息,请参阅 从外部系统访存数据时将结果消息与输入消息组合

过程

  • 处理成功调用

    在调用成功时,会将生成的消息传播至 Out 终端。 树里面是名为 InterfaceName.OperationNameResponse 的顶级元素。 此类型之下是操作返回类型 (named _return) 以及每个 inout 或 out 参数。 不会传播 in 参数,因为它们未更改。

    混合 inout 和 out 参数

    以下是 IDL 文件的示例:
    interface 
    
    ExampleOne {
       string exampleOneOperation(in string inparam, out string outparam, inout string inoutparam);
    
    }
    您将在顶级元素 ExampleOne.exampleOneOperationResponse下接收到参数 outparaminoutparam
    以下是 XML 示例:
    <ExampleOne.exampleOneOperationResponse> 
    	<_return>The operation return value</_return>
    	<outparam>value from corba app</outparam>
    	</inoutparam>your value changed by the corba app<inoutparam>
    </ExampleOne.exampleOneOperationResponse> 

    Out 和 inout 参数

    以下是 IDL 文件的示例:
    interface 
    
    ExampleTwo {
       string exampleTwoOperation(out string outparam, inout string inoutparam);
    
    }
    除去 in 参数与从 CORBARequest 节点传播的消息没有区别,因为不会传播 in 参数。
    以下是 XML 示例:
    <ExampleTwo.exampleTwoOperationResponse> 
    	<_return>The operation return value</_return>
    	<outparam>value from corba app</outparam>
    	</inoutparam>your value changed by the corba app<inoutparam>
    </ExampleTwo.exampleTwoOperationResponse> 

    仅 in 参数或没有任何参数

    如果操作不包含参数,或者仅包含 in 参数,那么会在顶级元素下收到 _return 值。

    以下是 IDL 文件的示例:
    interface 
    
    ExampleThree {
       string exampleThreeOperation(in string inparam);
    
    }
    以下是 XML 示例:
    <ExampleThree.exampleThreeOperationResponse> 
    	<_return>The operation return value</_return>
    </ExampleThree.exampleThreeOperationResponse> 

    无返回类型 (void) 且无 inout 或 out 参数

    如果调用的操作无返回类型 (void) 并且无 inout 或 out 参数,那么 CORBA 应用程序不会返回任何值以放入树中。 在此情况下,仅创建顶级元素。

    以下是 IDL 文件的示例:
    interface 
    
    ExampleFour {
       void exampleFourOperation(in string inparam);
    
    }
    以下是 XML 示例:
    <ExampleFour.exampleFourOperationResponse> 
    </ExampleFour.exampleFourOperationResponse> 
  • 处理用户定义的异常和 CORBA 系统异常

    在发生 CORBA 用户定义的异常或 CORBA 系统异常时,会将一条消息传播到 Error 终端。 CORBA 系统异常具有标准样式,并且如下所示:

    在 IDL 文件中:
    exception SystemException { // descriptive of error
    
    	unsigned long;      // more detail about error 
    	CompletionStatus;   // yes, no, maybe 
    }
    在树中:
    <SystemException> 
    	<minor>10</minor>
    	<completed>maybe</completed>
    </SystemException> 
    顶级元素是发出的 CORBA 系统异常的名称。 用户定义的异常的结构基于异常的 IDL。 以下是示例:
    在 IDL 文件中:
    		exception BadRecord { 
    	string why;
    
    }; 
    在消息中:
    <BadRecord> 
    	<why>reason text</why>
    </BadRecord>
    正如您从此示例中看到的,消息结构基于异常,而且并非由调用的操作所限定。
  • 处理节点中的故障
    任何故障都将传播到 Failure 终端。 可能的故障包括:
    • 无法与 CORBA 服务器通信
    • 无法与 CORBA 命名服务通信
    • 主体无效(包括顶级元素错误或缺少参数)