配置 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下接收到参数
outparam 和
inoutparam 。
以下是 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 命名服务通信
- 主体无效(包括顶级元素错误或缺少参数)