生成错误信息

如果服务器或应用程序在通过 RPC 调用时遇到严重错误,它应向 RPC 运行时指示它遇到了故障,理想情况下,应添加有关失败的信息,以便进行故障排除。

指示 RPC 运行时的严重错误

若要指示 RPC 运行时失败,请在 RPC 线程上调用异常时调用 RpcRaiseException 函数;如果在另一个线程上异步处理调用,则调用 RpcAsyncAbortCall 。 从服务器例程(如管理器例程)返回错误代码是不够的 ,根据 RPC 规范,无论 idl/acf 文件设置如何,函数的返回值在服务器上都没有错误语义。

当组件中发生严重错误时,请执行任何认为必要的清理,然后使用错误代码调用 RpcRaiseException 函数。 RpcRaiseException 与返回错误代码之间的唯一区别是调用 RpcRaiseException 时,不会封送输出参数。 这通常是一个优点,因为避免未初始化的输出参数变得没有必要。

生成其他扩展错误信息

正如 RPC 运行时生成错误记录链一样,服务器或应用程序可以将自己的记录添加到链中。 此方法通常有助于故障排除过程。 例如,服务器可能会尝试打开给定的文件并收到“找不到文件”错误。 仅返回错误 2 对确定缺少哪个文件没有帮助。

相反,服务器可以调用 RpcErrorAddRecord 函数,并在错误记录中提供字符串参数 ANSI 或 Unicode,指示它要查找的文件的完整路径。 当所有这些信息出现在远程计算机上的用户屏幕上时,故障排除变得微不足道:一个简单的检查文件是否存在,特别是因为相关计算机的名称已由 RPC 运行时提供。

如果没有足够的内存可用, RpcErrorAddRecord 函数调用可能会失败,即使它只需要几个字节的堆空间。 此外, RpcErrorAddRecord 添加的 记录将累积在给定线程中。 运行时通常会在调用服务器例程之前清除这些记录,但如果在 RPC 外部使用了扩展错误信息,请通过调用 RpcErrorClearInformation 来清理线程中累积的扩展错误。