异步管道状态

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

IN 管道

客户端行为

状态 州名称 操作
C 拨打电话 使 RPC
  • 成功后,转到状态 WS
  • 出现异常时,转到“结束”
若要失败:转到 Can
P 推送 进行推送
  • 失败时转到“结束”
  • 成功后转到 WS
若要失败:转到 Can
WS 等待发送 等待通知
  • 如果无法获取通知,请转到 Can
  • 如果成功收到 RpcSendComplete 并且需要发送更多数据,请转到 P
  • 如果收到成功的 RpcSendComplete 并且不需要发送更多数据,请转到 NP
  • 如果收到失败 RpcCallComplete ,请转到 Comp
若要失败:转到 Can
NP Null 推送 推送 0 字节 (null 推送)
  • 失败时转到“结束”
  • 成功后,转到 WComp
若要失败:转到 Can
可以 取消呼叫 调用 RpcAsyncCancelCall转到 WComp
WComp 等待完成 等待 notificationCall-complete 通知应收到。
转到“Comp”
Comp Completion 问题 RpcAsyncCompleteCall转到结尾
结束

服务器行为

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

OUT 管道

客户端行为

状态 州名称 操作
C 拨打电话 使 RPC
  • 成功后转到 P
  • 失败时转到“Comp”
若要失败:转到 Can
P 请求 进行拉取
  • 失败时转到“结束”
  • 成功且同步完成且读取非零字节时,转到 P
  • 成功且同步完成且读取零字节 (null 拉取) 转到 WComp
  • 成功后,) 转到 WP 返回异步完成 (ERROR_IO_PENDING
若要失败:转到 Can
WP 等待拉取 等待通知
  • 如果无法获取完成,请转到 Can
  • 如果收到失败 RpcReceiveComplete ,请转到 Can
  • 如果成功收到 RpcReceiveComplete 且读取的字节数非零,请转到 P
  • 如果收到成功 RpcReceiveComplete 且读取零字节 (null 拉取) 转到 Comp
  • 如果收到失败,可以
若要失败:转到 Can
可以 取消呼叫 调用 RpcAsyncCancelCall转到 WComp
WComp 等待完成 等待通知。 应收到呼叫完成通知。
转到“Comp”
Comp Completion 问题 RpcAsyncCompleteCall转到结尾
结束

服务器行为

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

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
  • 成功后,) 转到 WPL 返回异步完成 (ERROR_IO_PENDING
若要失败:转到 Can
WPL 等待拉取 等待通知
  • 如果无法获取完成,请转到 Can
  • 如果收到失败 RpcReceiveComplete ,请转到 Can
  • 如果成功收到 RpcReceiveComplete 且读取非零字节,请转到 PL
  • 如果收到成功 RpcReceiveComplete 且读取为零字节,请转到 Comp
  • 如果收到失败,可以
若要失败:转到 Can
可以 取消呼叫 调用 RpcAsyncCancelCall转到 WComp
WComp 等待完成 等待通知。 应收到 CallComplete 通知。
转到“Comp”
Comp Completion 问题 RpcAsyncCompleteCall转到结尾
结束

服务器行为

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

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