异步管道状态

本页介绍 RPC 调用的异步管道状态。

IN 管道

客户端行为

状态 州名称 操作
C 进行呼叫 使 RPC
  • 成功后转到状态 WS
  • 异常转到“结束”
若要失败:请转到 Can
P 推送 进行推送
  • 失败时转到“结束”
  • 成功后转到 WS
若要失败:请转到 Can
WS 等待发送 等待通知
  • 未能收到通知转到 Can
  • 如果收到成功的 RpcSendComplete 并且需要将更多数据发送到 P
  • 如果收到成功的 RpcSendComplete 并且不需要将更多数据发送到 NP
  • 如果收到失败 RpcCallComplete ,请转到 Comp
若要失败:请转到 Can
NP Null 推送 推送 0 字节 (null 推送)
  • 失败时转到“结束”
  • 成功后转到 WComp
若要失败:请转到 Can
可以 取消呼叫 RpcAsyncCancelCallGo 调用 WComp
WComp 等待完成 等待 notificationCall 完成通知应收到。
转到 Comp
Comp Completion 发出 RpcAsyncCompleteCallGo 到 End
结束

服务器行为

状态 州名称 操作
D Dispatch 调用由 RPC 运行时转到 P 进行调度
在 RPC 线程上执行时失败 () :引发异常;转到 End
正常失败:转到 A
P 请求 进行拉取
  • 失败时转到“结束”
  • 成功且同步完成时,非零字节读取转到 P
  • 成功且同步完成时,读取为零字节, (null 拉取) 转到 Comp
  • 返回成功和异步完成 (ERROR_IO_PENDING) 转到 WP
若要失败:请转到 A
WP 等待拉取 等待通知若要失败:请转到 A
A 中止调用 调用 RpcAsyncAbortCallGo 以结束
Comp Completion 调用 RpcAsyncCompleteCallGo 以结束
结束

OUT 管道

客户端行为

状态 州名称 操作
C 进行呼叫 使 RPC
  • 成功后转到 P
  • 失败时转到 Comp
若要失败:请转到 Can
P 请求 进行拉取
  • 失败时转到“结束”
  • 成功且同步完成时,非零字节读取转到 P
  • 成功且同步完成时,读取零字节 (null 拉取) 转到 WComp
  • 返回成功和异步完成 (ERROR_IO_PENDING) 转到 WP
若要失败:请转到 Can
WP 等待拉取 等待通知若要失败:请转到 Can
可以 取消呼叫 RpcAsyncCancelCallGo 调用 WComp
WComp 等待完成 等待通知。 应接收呼叫完成通知。
转到 Comp
Comp Completion 发出 RpcAsyncCompleteCallGo 到 End
结束

服务器行为

状态 州名称 操作
D Dispatch 调用由 RPC 运行时转到 P 进行调度
在 RPC 线程上执行时失败 () :引发异常;转到 End
正常失败:转到 A
P 推送 进行推送
  • 成功后转到 WP
  • 失败时转到“结束”
若要失败:请转到 A
WP 等待推送 等待通知
  • 未能完成,请转到 A
  • 如果收到成功的 RpcSendComplete 并且需要将更多数据发送到 P
  • 如果收到成功的 RpcSendComplete 并且不需要将更多数据发送到 NP
  • 如果收到失败,则为 Comp
若要失败:请转到 A
NP Null 推送 推送 0 个字节
  • 成功时转到 WNP
  • 失败时转到 Comp
若要失败:请转到 A
WNP 等待 Null 推送 等待通知
  • 未能完成,请转到 A
  • 如果收到失败,则为 Comp
  • 如果收到成功,则为 Comp
A 中止调用 调用 RpcAsyncAbortCall;转到 End
Comp Completion 问题 RpcAsyncCompleteCall;转到 End
结束

IN-OUT 管道

客户端行为

状态 州名称 操作
C 进行呼叫 使 RPC
  • 成功后转到 WS
  • 异常转到“结束”
若要失败:请转到 Can
PS 推送 进行推送
  • 失败时转到“结束”
  • 成功后转到 WS
若要失败:请转到 Can
WS 等待发送 等待通知
  • 未能收到通知转到 Can
  • 如果收到成功的 RpcSendComplete 并且需要将更多数据发送到 PS
  • 如果收到成功的 RpcSendComplete 并且不需要将更多数据发送到 NP
  • 如果收到失败 RpcCallComplete ,请转到 Comp
若要失败:请转到 Can
NP Null 推送 推送 0 字节 (null 推送)
  • 失败时转到“结束”
  • 成功后转到 PL
若要失败:请转到 Can
PL 请求 进行拉取
  • 失败时转到“结束”
  • 成功且同步完成时,非零字节读取转到 PL
  • 成功且同步完成时,读取零字节 (null 拉取) 转到 WComp
  • 返回成功和异步完成 (ERROR_IO_PENDING) 转到 WPL
若要失败:请转到 Can
WPL 等待拉取 等待通知
  • 未能完成,请转到 Can
  • 如果收到失败 RpcReceiveComplete ,请转到 Can
  • 如果收到包含非零字节读取的成功 RpcReceiveComplete ,请转到 PL
  • 如果收到成功 RpcReceiveComplete 且读取的字节为零,请转到 Comp
  • 如果收到失败,请转到 Can
若要失败:请转到 Can
可以 取消呼叫 RpcAsyncCancelCallGo 调用 WComp
WComp 等待完成 等待通知。 应接收 CallComplete 通知。
转到 Comp
Comp Completion 发出 RpcAsyncCompleteCallGo 到 End
结束

服务器行为

状态 州名称 操作
D Dispatch RPC runtimeGo 将调用调度到 PL
在 RPC 线程上执行时失败 () :引发异常;转到 End
正常失败:转到 A
PL 请求 进行拉取
  • 失败时转到“结束”
  • 成功且同步完成时,非零字节读取转到 PL
  • 成功且同步完成时,读取的字节为零, (null 拉取) 转到 PS
  • 返回成功和异步完成 (ERROR_IO_PENDING) 转到 WPL
若要失败:请转到 A
WPL 等待拉取 等待通知若要失败:请转到 A
PS 推送 进行推送
  • 成功后转到 WPS
  • 失败时转到“结束”
若要失败:请转到 A
WPS 等待推送 等待通知
  • 未能完成,请转到 A
  • 如果收到成功的 RpcSendComplete 并且需要将更多数据发送到 PS
  • 如果收到成功的 RpcSendComplete 并且不需要将更多数据发送到 NP
  • 如果收到失败,则为 Comp
若要失败:请转到 A
NP Null 推送 推送 0 个字节
  • 成功时转到 WNP
  • 失败时转到 Comp
若要失败:请转到 A
WNP 等待 Null 推送 等待通知
  • 未能完成,请转到 A
  • 如果收到失败,则为 Comp
  • 如果收到成功,则为 Comp

A 中止调用 调用 RpcAsyncAbortCall;转到 End
Comp Completion 问题 RpcAsyncCompleteCall;转到 End
结束