MC_SEND_ERROR

MC_SEND_ERROR谓词向合作伙伴事务计划(TP)通知本地 TP 遇到应用程序级错误。

以下结构描述了 MC_SEND_ERROR 谓词使用的谓词控制块(VCB)。

语法

  
struct mc_send_error {  
    unsigned short      opcode;  
    unsigned char       opext;  
    unsigned char       reserv2;  
    unsigned short      primary_rc;  
    unsigned long       secondary_rc;  
    unsigned char       tp_id[8];  
    unsigned long       conv_id;  
    unsigned char       rts_rcvd;  
      unsigned char       err_type;  
    unsigned char       err_dir;  
    unsigned char       reserv4;  
    unsigned char       reserv5[2];  
    unsigned char       reserv6[4];  
};   

成员

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

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

reserv2
保留字段。

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 返回。

rts_rcvd
返回的参数。 指示合作伙伴 TP 是否 MC_REQUEST_TO_SEND颁发。可能的值包括:

  • AP_YES指示合作伙伴 TP 已发出 MC_REQUEST_TO_SEND,请求本地 TP 将会话更改为 RECEIVE 状态。 若要更改为 RECEIVE 状态,本地 TP 可以使用 MC_PREPARE_TO_RECEIVEMC_RECEIVE_AND_WAITMC_RECEIVE_AND_POST

  • AP_NO表示合作伙伴 TP 尚未发出 MC_REQUEST_TO_SEND

    err_type
    对于映射会话,如果支持同步点,则提供此参数。 有效值为:

    AP_PROG

    AP_BACKOUT_NO_RESYNC

    AP_BACKOUT_RESYNC

    err_dir
    提供的参数。 指示错误是只接收数据还是即将发送的数据。 仅当会话处于SEND_PENDING状态时,才使用此参数。 否则将忽略该参数。 以下是允许的值:

  • AP_RCV_DIR_ERROR指示在检测到与刚接收的数据关联的错误后,发出 了 TP MC_SEND_ERROR

  • AP_SEND_DIR_ERROR指示在检测到与要发送的数据关联的错误后,发出 TP MC_SEND_ERROR 。 例如,从磁盘驱动器读取数据时,TP 遇到错误。

    reserv3
    保留字段。

返回代码

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

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

AP_BAD_CONV_ID

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

AP_BAD_TP_ID

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

AP_BAD_ERROR_DIRECTION

辅助返回代码;APPC 无法识别指定的 err_dir

AP_SEND_ERROR_BAD_TYPE

辅助返回代码; err_type 的值无效。

AP_SEND_ERROR_LOG_LL_WRONG

辅助返回代码;错误日志 GDS 变量的 LL 字段与数据的实际长度不匹配。

如果 发出MC_SEND_ERROR 处于任何允许状态,则可以生成以下返回代码:

AP_COMM_SUBSYSTEM_ABENDED
主要返回代码;指示以下条件之一:

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

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

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

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

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

    当此返回代码与 MC_ALLOCATE一起使用时,它可能指示找不到任何通信系统来支持本地逻辑单元(LU)。 (例如,使用 TP_STARTED 指定的本地 LU 别名不正确或尚未配置。请注意,如果 lu_aliasmode_name 少于 8 个字符,则必须确保这些字段填充右侧的空格。 如果这些参数未填充空格,则返回此错误,因为没有节点可以满足 MC_ALLOCATE 请求。

    当MC_ALLOCATE为配置了多个节点的 Microsoft Host Integration Server 客户端系统生成此返回代码时,有两个辅助返回代码,如下所示:

    0xF0000001

    辅助返回代码;尚未启动任何节点。

    0xF0000002

    辅助返回代码;至少有一个节点已启动,但未在任何活动节点上配置本地 LU (TP_STARTED颁发 时)。 问题可能是以下任一问题:

  • 未启动具有本地 LU 的节点。

  • 未配置本地 LU。

    AP_CONV_FAILURE_NO_RETRY
    主要返回代码;由于永久性条件(例如会话协议错误)而终止了会话。 系统管理员应检查系统错误日志以确定错误的原因。 在更正错误之前,不要重试对话。

    AP_CONV_FAILURE_RETRY
    主要返回代码;由于临时错误,会话已终止。 重启 TP 以查看问题是否再次发生。 如果这样做,系统管理员应检查错误日志以确定错误的原因。

    AP_CONVERSATION_TYPE_MIXED
    主要返回代码;TP 已发出基本和映射的对话谓词。 单个对话中只能发出一种类型。

    AP_INVALID_VERB_SEGMENT
    主要返回代码;VCB 超出了数据段的末尾。

    AP_STACK_TOO_SMALL
    主要返回代码;应用程序的堆栈大小太小,无法执行谓词。 增加应用程序的堆栈大小。

    AP_CONV_BUSY
    主要返回代码;在任何对话中,一次只能有一个未完成的对话谓词。 如果本地 TP 有多个线程,并且多个线程使用相同的 conv_id发出 APPC 调用,则可能会出现这种情况。

    AP_THREAD_BLOCKING
    主要返回代码;调用线程已在阻塞调用中。

    AP_UNEXPECTED_DOS_ERROR
    主要返回代码;作系统在处理来自本地 TP 的 APPC 调用时,已将错误返回到 APPC。 作系统返回代码通过 secondary_rc返回。 它以 Intel 字节交换的顺序显示。 如果问题仍然存在,请咨询系统管理员。

    仅当以 SEND 状态发出 MC_SEND_ERROR 时,才能生成以下返回代码:

    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_PROG_ERROR_PURGING
    主要返回代码;在 RECEIVE、PENDING、PENDING_POST、CONFIRM、CONFIRM_SEND 或 CONFIRM_DEALLOCATE 状态中,合作伙伴 TP 发出 MC_SEND_ERROR。 已清除发送但尚未收到的数据。

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

  • 合作伙伴 TP 发布了MC_DEALLOCATE,dealloc_type设置为AP_ABEND。

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

    仅当 MC_SEND_ERROR 以 RECEIVE 状态发出时,才能生成以下返回代码:

    AP_DEALLOC_NORMAL
    主要返回代码;此返回代码不指示错误。

    合作伙伴 TP 颁发MC_DEALLOCATE,dealloc_type设置为以下项之一:

  • AP_FLUSH

  • 具有指定为AP_NONE的对话的同步级别的AP_SYNC_LEVEL

注解

当 TP 发出此谓词时,对话可以处于除 RESET 之外的任何状态。 如果使用 err_dir ,则必须SEND_PENDING会话状态。

本地 TP 会立即将错误通知发送到合作伙伴 TP;它不保留本地 LU 发送缓冲区中的信息。

成功执行此谓词后,会话处于本地 TP 的 SEND 状态,并且处于合作伙伴 TP 的 RECEIVE 状态。

新状态由 primary_rc确定。 下表汇总了可能的状态更改。

primary_rc 新状态
AP_OK 发送
AP_ALLOCATION_ERROR 重置
AP_CONV_FAILURE_RETRY 重置
AP_CONV_FAILURE_NO_RETRY 重置
AP_DEALLOC_ABEND 重置
AP_DEALLOC_ABEND_PROG 重置
AP_DEALLOC_ABEND_SVC 重置
AP_DEALLOC_ABEND_TIMER 重置
AP_DEALLOC_NORMAL 重置
AP_PROG_ERROR_PURGING 收到
AP_SVC_ERROR_PURGING 收到

如果在 TP 发出 MC_SEND_ERROR时会话处于 RECEIVE 状态,APPC 将清除传入数据。 这些数据包括:

  • MC_SEND_DATA发送的数据。

  • 返回代码指示器。

  • 确认请求。

  • 解除分配请求。

    APPC 不会清除传入的请求到发送指示器。 APPC 将清除的传入返回代码指示器替换为其他返回代码。 主要返回代码AP_OK替换以下清除的返回代码指示器:

    AP_PROG_ERROR_NO_TRUNC

    AP_PROG_ERROR_PURGING

    AP_PROG_ERROR_TRUNC

    AP_SVC_ERROR_NO_TRUNC

    AP_SVC_ERROR_PURGING

    AP_SVC_ERROR_TRUNC

    主要返回代码AP_DEALLOC_NORMAL替换以下清除的返回代码指示器:

    AP_ALLOCATION_ERROR

    AP_ALLOCATION_FAILURE_NO_RETRY

    AP_ALLOCATION_FAILURE_RETRY

    AP_CONVERSATION_TYPE_MISMATCH

    AP_DEALLOC_ABEND

    AP_DEALLOC_ABEND_PROG

    AP_DEALLOC_ABEND_SVC

    AP_DEALLOC_ABEND_TIMER

    AP_PIP_NOT_ALLOWED

    AP_PIP_NOT_SPECIFIED_CORRECTLY

    AP_SECURITY_NOT_VALID

    AP_SYNC_LEVEL_NOT_SUPPORTED

    AP_TP_NAME_NOT_RECOGNIZED

    AP_TRANS_PGM_NOT_AVAIL_NO_RETRY

    AP_TRANS_PGM_NOT_AVAIL_RETRY

    当会话处于SEND_PENDING状态时,APPC 会根据 err_dir中的值向合作伙伴 TP 报告以下返回代码:

    AP_PROG_ERROR_PURGING
    本地 TP 以 RECEIVE 作为err_dir发出MC_SEND_ERROR

    AP_PROG_ERROR_NO_TRUNC
    本地 TP 以 SEND 作为 err_dir颁发MC_SEND_ERROR