失败,fault_status值就被返回,如果通信失败,就会有一个comm_status值被返回,
§3.3 使用RPC的头文件
为了确保DCE/RPC和TxRPC的stub可以在同一个环境中编译,TxRPC在实现时使用了不同的头文件,这些头文件都包含在IDL编译器生成的simp.h文件中。
§3.4 和ATMI协同工作
TxRPC可执行文件利用ATMI进行通信。作为客户端,可以使用所有的通信机制进行通信,而在同一个服务器中,不能同时实现会话服务和RPC服务。虽然在同一个服务器中可以混合STMI请求/响应机制和RPC服务,但并不推荐这么做,原因主要是RPC操作不能调用tpreturn()或者tpforward(),如果调用了,错误就会返回客户端,可能是rpc_x_fault_unspec或者rpc_s_fault_unspec。
适用于服务器但不适用于客户机的两个函数是tpsvrinit()和tpsvrdone(),它们在服务器启动或停止时被调用,因为服务器在接受任何TxRPC操作前,都必须调用tx_open(),因此tpsvrinit()是一个调用tx_open()的好地方!
§3.5 和TX协同工作
TX函数提供了事务处理的函数:tx_begin(), tx_commit(), tx_rollback()。TX具有如下功能:
1. 提供了一个接口或操作,它带有一个属性[transaction_optional],可以指示着RPC调用是否在一个事务中,函数调用中所作的操作都是事务的一部发。 2. 提供了一个接口或操作,它带有一个属性[transaction_mandatory],它指示着RPC调用必须在一个事务中,否则就会返回一个rxrpc_x_not_in_transaction的例外。 3. 如果以上属性都未指定,那么调用的操作不是事务的任何一个部分。
4. 如果TxRPC操作在服务器中调用,而之前没有调用tx_open(),则一个txrpc_x_no_tx_open_done例外就返回客户端。
5. TxRPC允许tx_rollback()被其它操作调用来把事务设置为只能回滚的,这就会导致所有
事务中的操作最后都被回滚。
第四章 Build RPC客户和服务器程序
§4.1 Build一个RPC服务器
RPC服务的名字公告有所不同。对于请求/响应服务器,一个服务名被映射到一个过程,而对于RPC服务器,一个服务名被映射到一个IDL接口名,RPC服务的公告是这个样子:
RPC服务器用buildserver进行创建,通过-f指出RPC运行库。
§4.2 Build一个RPC客户机
本地RPC客户机通过buildclient进行创建,它自动地连接Tuxdo库,但RPC运行时库必须明确指定,这个工作通过-f来指定。
相关推荐: