异步 RPC

异步远程过程调用(RPC)是一个Microsoft扩展,它解决了 Open Software Foundation-Distributed Computing Environment(OSF-DCE)定义的传统 RPC 模型的几个限制。 异步 RPC 将远程过程调用与其返回值分开,这解决了传统同步 RPC 的以下限制:

  • 来自单线程客户端的多个未完成调用。 在传统的 RPC 模型中,客户端在远程过程调用中被阻止,直到调用返回。 这可以防止客户端具有多个未完成的调用,同时仍有其线程可用于执行其他工作。
  • 客户端速度缓慢或延迟。 生成数据速度缓慢的客户端可能需要使用初始数据进行远程过程调用,然后在生成数据时提供其他数据。 这不能与传统 (同步) RPC 一起使用。
  • 服务器速度缓慢或延迟。 一个需要很长时间才能完成的远程过程调用将在任务的持续时间内将调度线程关联起来。 使用异步 RPC,服务器可以启动单独的(异步)作来处理请求,并在请求可用时发送回答复。 服务器还可以以增量方式发送答复,因为结果可用,而无需在远程调用期间将调度线程捆绑在一起。 通过使客户端应用程序异步,可以阻止服务器不必要地将客户端应用程序绑起来。
  • 传输大量数据。 在客户端和服务器之间传输大量数据,尤其是通过慢速链接传输,在传输期间将客户端线程和服务器管理器线程连接起来。 使用异步 RPC 和管道,数据传输可以增量进行,而不会阻止客户端或服务器执行其他任务。

通过使用 [异步] 属性声明函数来利用异步 RPC 机制。 由于在属性配置文件(ACF)中发出此声明,因此无需对接口定义语言(IDL)文件进行任何更改;异步 RPC 对线路协议没有影响(客户端和服务器之间传输数据的方式)。 这意味着同步客户端和异步客户端都可以与异步服务器应用程序通信。

本部分概述了如何使用异步 RPC 开发分布式应用程序。 以下部分介绍了概述: