映射对话示例

有关映射对话的背景信息,请参阅 基本对话和映射对话比较

下面的映射对话示例显示了用于启动会话、交换数据和结束会话的 APPC 谓词。 APPC 谓词参数位于括号中。

由调用 TP 颁发 由可调用的 TP 颁发
TP_STARTED
MC_ALLOCATE
MC_SEND_DATA
MC_DEALLOCATE
TP_ENDED RECEIVE_ALLOCATE
MC_RECEIVE_AND_WAIT
(primary_rc=AP_OK)
(rtn_status=AP_NO)
(what_rcvd=AP_DATA_COMPLETE)
MC_RECEIVE_AND_WAIT
(primary_rc=AP_DEALLOC_NORM)
TP_ENDED

以下段落描述了映射对话中使用的谓词。

用于启动映射对话的动词

若要启动映射对话,调用 TP 会发出以下谓词:

  • TP_STARTED,通知 APPC 本地 TP 正在开始对话。

  • MC_ALLOCATE,它请求 APPC 在本地 TP 和合作伙伴 TP 之间建立会话。

    可调用 TP 问题 RECEIVE_ALLOCATE,通知 APPC 它已准备好开始与调用 TP 的对话。

用于在映射对话中发送数据的谓词

MC_SEND_DATA 将一条数据记录 (包含要在本地 LU 的发送缓冲区) 传输的应用程序数据的记录。 在发生以下事件之一之前,不会向合作伙伴 TP 传输数据:

  • 发送缓冲区将填满。

  • 发送 TP 发出一个谓词,强制 APPC 刷新缓冲区并将数据发送到伙伴 TP。

    在前面的示例中,发送缓冲区包含数据记录和 MC_ALLOCATE 请求 (位于数据记录) 之前。 因此,在示例中, MC_DEALLOCATE 刷新缓冲区,并将 MC_ALLOCATE 请求和数据记录发送到合作伙伴 TP。 刷新缓冲区的其他谓词 MC_CONFIRMMC_FLUSH

用于在映射对话中接收数据的谓词

MC_RECEIVE_AND_WAIT谓词允许 TP 接收数据记录或状态信息。 如果当前没有可用的数据,TP 将等待数据到达。 对于 Windows 系统,与 WinAsyncAPPC(而不是此调用的阻止版本)一起发出MC_RECEIVE_AND_WAIT

在此示例中,接收 TP 问题 MC_RECEIVE_AND_WAIT 两次。 第一次,它发出谓词来接收数据。 (what_rcvd AP_DATA_COMPLETE) 完成接收完整数据记录后,它会再次发出MC_RECEIVE_AND_WAIT以接收返回代码。 返回代码AP_DEALLOC_NORMAL指示会话已解除分配。

注意

MC_RECEIVE_IMMEDIATE 执行 与 MC_RECEIVE_AND_WAIT 相同的功能,不同之处在于,如果合作伙伴 TP 当前没有数据可用,则它不会等待。 相反,它会向调用的 TP 返回无数据可用响应。

结束映射对话的谓词

若要结束映射的会话,其中一个 TP 问题MC_DEALLOCATE,这会导致 APPC 解除分配两个 TP 之间的会话。

解除分配会话后,两个 TP 问题 TP_ENDED

注意

TP 可以同时参与多个对话。 在这种情况下,TP 问题在解除分配所有对话后 TP_ENDED