MC_POST_ON_RECEIPT

MC_POST_ON_RECEIPT谓词允许应用程序注册,以在数据或状态到达本地逻辑单元 (LU) 时接收通知,而无需同时实际接收通知。 此谓词只能在处于 RECEIVE 状态时发出,并且它永远不会导致会话状态的更改。

当事务程序 (TP) 发出此谓词时,APPC 会立即将控制权返回到 TP。 满足指定条件时,将发出 由 sema 参数指定的 Win32® 事件信号,谓词完成。 然后,TP 查看谓词控制块 (VCB) 中的返回代码,以确定任何数据或状态通知是否已到达本地 LU,并发出 MC_RECEIVE_IMMEDIATEMC_RECEIVE_AND_WAIT 谓词来实际接收数据或状态通知。

MC_POST_ON_RECEIPT谓词实现 POST_ON_RECEIPTTEST 谓词,如 IBM 事务程序员的 LU 类型 6.2 手册中所述。

以下结构描述了 MC_POST_ON_RECEIPT 谓词使用的谓词控制块。

语法

  
struct mc_post_on_receipt {  
    unsigned short   opcode;  
    unsigned char    opext;  
    unsigned char    reserv1;  
    unsigned char    primary_rc;  
    unsigned long    secondary_rc;  
    unsigned char    tp_id[8];  
    unsigned long    conv_id;  
    unsigned short   reserv2;  
    unsigned char    reserv3;  
    unsigned char    reserv4;  
    unsigned short   max_len;  
    unsigned short   reserv5;  
    unsigned char *  reserv6;  
    unsigned char    reserv7[5];  
    unsigned long    sema;  
};   

成员

opcode
提供的参数。 指定谓词操作代码,AP_M_POST_ON_RECEIPT。

opext
提供的参数。 指定谓词操作扩展,AP_MAPPED_CONVERSATION。

reserv1
一个保留字段。

primary_rc
返回的参数。 指定在谓词完成时由 APPC 设置的主要返回代码。 有效的返回代码因发出的 APPC 谓词而异。 有关此谓词的有效错误代码,请参阅“返回代码”。

secondary_rc
返回的参数。 指定在谓词完成时由 APPC 设置的次要返回代码。 有效的返回代码因发出的 APPC 谓词而异。 有关此谓词的有效错误代码,请参阅“返回代码”。

tp_id
提供的参数。 标识本地 TP。 此参数的值由调用 TP 中的 TP_STARTED 或调用的 TP 中的RECEIVE_ALLOCATE 返回。

conv_id
提供的参数。 提供会话标识符。 此参数的值由调用 TP 中的 MC_ALLOCATE 或调用的 TP 中的 RECEIVE_ALLOCATE 返回。

reserv2
一个保留字段。

reserv3
一个保留字段。

reserv4
一个保留字段。

max_len
提供的参数。 指定触发 APPC 向 TP 发布通知的数据长度。

reserv5
一个保留字段。

reserv6
一个保留字段。

reserv7
一个保留字段。

成武
提供的参数。 指定 Win32 事件的句柄。 事件应由 TP 创建,TP 负责确保在调用之前和谓词完成之后重置事件。

返回代码

AP_OK
主要返回代码;谓词已成功执行。

AP_DATA

辅助返回代码;数据可供程序接收。

AP_NOT_DATA

辅助返回代码;除数据之外的信息可供程序接收。

AP_CANCELLED
主返回代码;谓词已取消。

AP_PARAMETER_CHECK
主要返回代码;由于参数错误,谓词未执行。

AP_BAD_CONV_ID

辅助返回代码; conv_id 的值与 APPC 分配的会话标识符不匹配。

AP_BAD_TP_ID

辅助返回代码; tp_id 的值与 APPC 分配的 TP 标识符不匹配。

AP_INVALID_SEMAPHORE_HANDLE

辅助返回代码; sema 参数未设置为有效值。

AP_STATE_CHECK
主要返回代码;谓词未执行,因为它是在无效状态下发出的。

AP_ALLOCATION_ERROR
主返回代码;APPC 未能分配会话。 会话状态设置为 RESET。

此代码可以通过 MC_ALLOCATE后发出的谓词返回。

AP_ALLOCATION_FAILURE_NO_RETRY

辅助返回代码;由于配置错误或会话协议错误等永久性条件,无法分配会话。 若要确定发生了哪种错误,系统管理员应检查错误日志文件。 请仅在更正错误之后才重试分配。

AP_ALLOCATION_FAILURE_RETRY

辅助返回代码;由于临时条件(例如链接失败),无法分配会话。 失败的原因已记录在系统错误日志中。 重试分配。

AP_CONVERSATION_TYPE_MISMATCH

辅助返回代码;伙伴 LU 或 TP 不支持在分配请求中指定的基本或映射) (会话类型。

AP_PIP_NOT_ALLOWED

辅助返回代码;分配请求指定的 PIP 数据,但合作伙伴 TP 不需要此数据,或者合作伙伴 LU 不支持这些数据。

AP_PIP_NOT_SPECIFIED_CORRECTLY

辅助返回代码;合作伙伴 TP 需要 PIP 数据,但分配请求未指定 PIP 数据或参数数不正确。

AP_SECURITY_NOT_VALID

辅助返回代码;合作伙伴 LU 不接受分配请求中指定的用户标识符或密码。

AP_SYNC_LEVEL_NOT_SUPPORTED

辅助返回代码;合作伙伴 TP 不支持分配请求中指定的 sync_level (AP_NONE 或AP_CONFIRM_SYNC_LEVEL) ,或者无法识别 sync_level

AP_TP_NAME_NOT_RECOGNIZED

辅助返回代码;伙伴 LU 无法识别分配请求中指定的 TP 名称。

AP_TRANS_PGM_NOT_AVAIL_NO_RETRY

辅助返回代码;远程 LU 拒绝分配请求,因为它无法启动请求的合作伙伴 TP。 条件是永久性的。 出错原因可能已记录在远程节点上。 请仅在更正错误之后才重试分配。

AP_TRANS_PGM_NOT_AVAIL_RETRY

辅助返回代码;远程 LU 拒绝分配请求,因为它无法启动请求的合作伙伴 TP。 这种状况可能是暂时性的,例如只是超时。出错原因可能已记录在远程节点上。 重试分配。

AP_COMM_SUBSYSTEM_ABENDED
主要返回代码;指示以下状况之一:

  • 此对话使用的节点遇到了 ABEND。

  • TP 与 PU 2.1 节点之间的连接已断开(LAN 错误)。

  • TP 计算机上的 SnaBase 遇到了 ABEND。

    系统管理员应检查错误日志以确定发生 ABEND 的原因。

    AP_COMM_SUBSYSTEM_NOT_LOADED
    主要返回代码;处理谓词时无法加载或终止某个必需的组件。 因此无法通信。 请联系系统管理员以执行纠正措施。

    AP_DEALLOC_ABEND_PROG
    主返回代码;由于以下原因之一,已解除分配会话:

  • 合作伙伴 TP 颁发 MC_DEALLOCATE

  • 合作伙伴 TP 遇到 ABEND,导致合作伙伴 LU 发送 MC_DEALLOCATE 请求。

    AP_DEALLOC_NORMAL
    主返回代码;合作伙伴 TP 在未请求确认的情况下解除分配了对话,并发布了MC_DEALLOCATE,dealloc_type设置为以下其中一项:

  • AP_CONFIRM_SYNC_LEVEL

  • AP_FLUSH

  • 使用指定为 AP_NONE 的会话的同步级别AP_SYNC_LEVEL

    AP_PROG_ERROR_NO_TRUNC
    主返回代码;当会话处于 SEND 状态时,合作伙伴 TP 已发出 MC_SEND_ERROR 。 数据未被截断。

    AP_PROG_ERROR_PURGING
    主返回代码;在 RECEIVE、PENDING、PENDING_POST、CONFIRM、CONFIRM_SEND 或 CONFIRM_DEALLOCATE 状态时,合作伙伴 TP 已 MC_SEND_ERROR颁发。 已发送但尚未接收的数据将被清除。

    AP_PROG_ERROR_TRUNC
    主返回代码;当会话处于 SEND 状态时,合作伙伴 TP 已发出 MC_SEND_ERROR 。 数据已被截断。

    AP_SVC_ERROR_NO_TRUNC
    主返回代码;在 RECEIVE、PENDING_POST、CONFIRM、CONFIRM_SEND 或 CONFIRM_DEALLOCATE 状态时, err_type设置为AP_SVC 的合作伙伴 TP (或合作伙伴 LU) 颁发MC_SEND_ERROR。 发送到合作伙伴 TP 的数据未截断。

    AP_SVC_ERROR_PURGING
    主返回代码;在 RECEIVE、PENDING_POST、CONFIRM、CONFIRM_SEND 或 CONFIRM_DEALLOCATE 状态时, err_type设置为AP_SVC 的合作伙伴 TP (或合作伙伴 LU) 颁发MC_SEND_ERROR。 发送到伙伴 TP 的数据可能已被清除。

    AP_SVC_ERROR_TRUNC
    主返回代码;在 RECEIVE、PENDING_POST、CONFIRM、CONFIRM_SEND 或 CONFIRM_DEALLOCATE 状态时, err_type设置为AP_SVC 的合作伙伴 TP (或合作伙伴 LU) 颁发MC_SEND_ERROR。 发送到合作伙伴 TP 的数据可能已被截断。

注解

虽然 MC_POST_ON_RECEIPT 谓词未完成,但可以在同一会话中发出以下谓词:

GET_ATTRIBUTES

GET_TYPE

MC_DEALLOCATE

MC_RECEIVE_AND_WAIT

MC_RECEIVE_IMMEDIATE

MC_REQUEST_TO_SEND

MC_SEND_ERROR

MC_TEST_RTS

TP_ENDED

在异步 MC_POST_ON_RECEIPT 谓词完成之前发出以下任一谓词会导致在向 Win32 事件发出信号且谓词控制块中的主返回代码设置为 AP_CANCELLED) (取消MC_POST_ON_RECEIPT谓词。

MC_DEALLOCATE

MC_RECEIVE_AND_WAIT

MC_RECEIVE_IMMEDIATE

MC_SEND_ERROR

TP_ENDED