异常处理 (RPC)

RPC 使用与 Windows API 相同的异常处理方法。

RpcTryFinally / RpcFinally / RpcEndFinally 结构等效于 Windows try-finally 语句。 RPC 异常构造 RpcTryExcept / RpcExcept / RpcEndExcept 等效于 Windows try-except 语句。

使用 RPC 异常处理程序时,客户端源代码是可移植的。 为每个平台提供的不同 RPC 头文件解析每个平台的 RpcTryRpcExcept 宏。 在 Windows 环境中,这些宏直接映射到 Windows try-finallytry-except 语句。 在其他环境中,这些宏映射到异常处理程序的其他特定于平台的实现。

这些结构引发的潜在异常包括 RPC 函数返回的错误代码集,其前缀RPC_S_和RPC_X,以及 Windows 返回的异常集。 有关详细信息,请参阅 RPC 返回值

虽然 RpcTryRpcExcept 宏提供了一种可自定义的平台不可知的方式来处理异常,但在 Windows Vista 和更高版本的 Windows 中, RpcExceptionFilter 是处理异常的建议方法。 它不需要编写自定义筛选器来捕获许多最常见的结构化异常;但是,自定义异常筛选器仍然需要 RpcExcept

在传输层) 上方的服务器应用程序、服务器存根和服务器运行时库 (中发生的异常将传播到客户端。 不会从服务器传输级别传播任何异常。 服务器例程将错误返回到 RPC 运行时的建议方法是引发异常。 服务器例程可以使用适合在服务器例程之间传达错误的任何方法,但如果遇到阻止其执行远程过程的错误,则应在清理后和返回到 RPC 运行时之前引发异常,而不是将只有服务器例程识别为错误的值返回到 RPC。

下图显示了如何将异常从服务器返回到客户端。

异常通过每个组件的相应 rpc 运行时从服务器返回到客户端

RPC 异常处理程序与 Open Software Foundation-Distributed Computing Environment (OSF-DCE) 异常处理宏 TRYFINALLYCATCH 略有不同。 各种供应商提供将 OSF-DCE RPC 函数映射到 Microsoft RPC 函数(包括 TRYCATCHCATCH_ALLENDTRY)的 include 文件。 这些头文件还会将 RPC_S_* 错误代码映射到 OSF-DCE 异常对应项,rpc_s_*,并将 RPC_X_* 错误代码映射到 rpc_x_*。 对于 OSF-DCE 可移植性,请使用包含文件。 有关 RPC 异常处理程序的详细信息,请参阅 RpcExceptionFilterRpcExceptRpcFinally。 有关 Windows 异常处理程序的详细信息,请参阅 结构化异常处理