MC_DEALLOCATE

MC_DEALLOCATE動詞會將兩個交易程式之間的交談解除配置 (TP) 。

下列結構描述 MC_DEALLOCATE 動詞用的 (VCB) 的動詞控制項區塊。

語法

  
struct mc_deallocate {  
    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    reserv3;  
    unsigned char    dealloc_type;  
    unsigned char    reserv4[2];  
    unsigned char    reserv5[4];  
    void             (WINAPI *callback)();  
    void             *correlator;  
    unsigned char    reserv6[4];  
};  

成員

opcode
提供的參數。 指定動詞作業程式碼 AP_M_DEALLOCATE。

opext
提供的參數。 指定動詞作業擴充功能,AP_MAPPED_CONVERSATION。

reserv2
保留的欄位。

primary_rc
傳回的參數。 指定 APPC 在動詞命令完成時所設定的主要傳回碼。 有效的傳回碼會依發出的 APPC 動詞而有所不同。 請參閱傳回碼以取得此動詞命令的有效錯誤碼。

secondary_rc
傳回的參數。 指定 APPC 在動詞命令完成時所設定的次要傳回碼。 有效的傳回碼會依發出的 APPC 動詞而有所不同。 請參閱傳回碼以取得此動詞命令的有效錯誤碼。

tp_id
提供的參數。 識別本機 TP。 此參數的值是由叫用 TP 中的 TP_STARTED 或叫用 tp 中的 RECEIVE_ALLOCATE 所傳回。

conv_id
提供的參數。 識別在這兩個 TPs 之間建立的交談。 此參數的值是由叫用 TP 中的 MC_ALLOCATE 或叫用 tp 中的 RECEIVE_ALLOCATE 傳回。

reserv3
保留的欄位。

dealloc_type
提供的參數。 指定如何執行解除配置。

針對 MC_DEALLOCATE,請使用 AP_ABEND 異常地解除配置交談。 如果在本機 TP 發出 MC_DEALLOCATE的情況下交談處於傳送狀態,APPC 會在解除配置交談之前,將本機邏輯單元的 (LU 的內容傳送至夥伴 TP) 傳送緩衝區。 如果交談處於 RECEIVE 或 PENDING_POST 狀態,APPC 會先清除任何傳入的資料,再解除配置交談。

TP 在遇到導致交易成功完成的錯誤時,應該指定 AP_ABEND。

在解除配置交談之前,AP_FLUSH 會將本機 LU 傳送緩衝區的內容傳送給夥伴 TP。 只有當交談處於傳送狀態時,才允許這個值。

AP_SYNC_LEVEL 會使用 MC_ALLOCATE) 所建立的交談同步處理層級 (來判斷如何解除配置交談。 只有當交談處於傳送狀態時,才允許這個值。

如果交談的同步處理層級 AP_NONE,APPC 會先將本機 LU 的傳送緩衝區內容傳送給夥伴 TP,然後再解除配置交談。

如果同步處理層級為 AP_CONFIRM_SYNC_LEVEL,APPC 會將本機 LU 傳送緩衝區的內容和確認要求傳送給夥伴 TP。 從夥伴 TP 收到確認時,APPC 會取消配置交談。 但是,如果夥伴 TP 回報錯誤,交談仍會保持配置。

回檔
提供的參數。 只有在 opext 成員中設定的 AP_EXTD_VCB 位指出支援同步處理點時,才會出現。 這個參數是使用者提供的回呼函式的位址。 如果此欄位為 Null,則不會提供任何通知。

回呼常式的原型如下所示:

void WINAPI callback_proc(  
    struct appc_hdr *vcb,  
    unsigned char tp_id[8],  
    unsigned long conv_id,  
    unsigned short type,  
    void *correlator  
   );  

回呼程式可以採用任何名稱,因為程式的位址會傳遞至 APPC DLL。 傳遞給函數的參數如下所示:

vcb

造成交談解除配置之 MC_DEALLOCATE 動詞控制項區塊的指標。

tp_id

擁有已解除配置之交談之 TP 的 TP 識別碼。

conv_id

已解除配置之交談的交談識別碼。

類型

導致叫用回呼的訊息流程類型。 可能的值包括:

AP_DATA_FLOW

會話上的標準資料流程。

AP_UNBIND

會話已正常解除系結。

AP_FAILURE

會話因為中斷而終止。

相關

這個值是在MC_DEALLOCATE動詞上指定的交互

相關
提供的參數。 只有在 opext 成員中設定了 AP_EXTD_VCB 位,指出對同步處理點 API 的支援時,才會出現。 這個交互 欄位可讓 TP 指定可用來讓回呼函式的呼叫相互關聯的值,例如,它自己的內部資料結構。 此值會在叫用時,傳回給 TP 作為回呼常式的其中一個參數。

reserv4
保留的欄位。

傳回碼

AP_OK
主要傳回碼;已成功執行動詞。

AP_PARAMETER_CHECK
主要傳回碼;因為參數錯誤,所以未執行此動詞。

AP_BAD_CONV_ID

次要傳回碼; conv_id 的值不符合 APPC 指派的交談識別碼。

AP_BAD_TP_ID

次要傳回碼; tp_id 的值與 APPC 所指派的 tp 識別碼不符。

AP_DEALLOC_BAD_TYPE

次要傳回碼; dealloc_type 參數未設定為有效的值。

AP_STATE_CHECK
主要傳回碼;因為發出的動作處於無效狀態,所以無法執行。

AP_DEALLOC_CONFIRM_BAD_STATE

次要傳回碼;交談未處於傳送狀態,且 TP 嘗試清除傳送緩衝區並傳送確認要求。 發生這種嘗試的原因是 AP_SYNC_LEVEL dealloc_type 的值,且交談的同步處理層級 AP_CONFIRM_SYNC_LEVEL。

AP_DEALLOC_FLUSH_BAD_STATE

次要傳回碼;交談未處於傳送狀態,且 TP 嘗試清除傳送緩衝區。 發生這種嘗試的原因是因為 dealloc_type 的值 AP_FLUSH,或 dealloc_type 的值已 AP_SYNC_LEVEL,且交談的同步處理層級為 AP_NONE。 無論是哪一種情況,交談都必須處於傳送狀態。

AP_ALLOCATION_ERROR
主要傳回碼;APPC 無法配置交談。 交談狀態設定為 [重設]。

您可以透過 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_CONV_FAILURE_NO_RETRY
    主要傳回碼;交談已結束,因為發生永久狀況,例如會話通訊協定錯誤。 系統管理員應檢查系統錯誤記錄檔,以判斷錯誤的原因。 請勿重試交談,直到錯誤更正為止。

    AP_CONV_FAILURE_RETRY
    主要傳回碼;因為暫時性錯誤,所以已終止交談。 重新開機 TP 以查看是否發生問題。 如果有的話,系統管理員應該檢查錯誤記錄檔,以判斷錯誤的原因。

    AP_CONVERSATION_TYPE_MIXED
    主要傳回碼;TP 已發出基本和對應對話動詞。 只有一個類型可以在單一對話中發出。

    AP_INVALID_VERB_SEGMENT
    主要傳回碼;VCB 延伸超過資料區段的結尾。

    AP_PROG_ERROR_PURGING
    主要傳回碼;在 [接收]、[擱置]、[PENDING_POST]、[確認]、[CONFIRM_SEND] 或 [CONFIRM_DEALLOCATE 狀態時,夥伴 TP 會發出 MC_SEND_ERROR。 已清除傳送但尚未接收的資料。

    AP_STACK_TOO_SMALL
    主要傳回碼;應用程式的堆疊大小太小,無法執行動詞。 增加應用程式的堆疊大小。

    AP_CONV_BUSY
    主要傳回碼;任何交談上一次只能有一個未處理的交談動詞。 如果本地 TP 有多個執行緒,而且有多個執行緒使用相同的 conv_id發出 APPC 呼叫,就會發生這種情況。

    AP_THREAD_BLOCKING
    主要傳回碼;呼叫執行緒已在封鎖呼叫中。

    AP_UNEXPECTED_DOS_ERROR
    主要傳回碼;作業系統在處理來自本地 TP 的 APPC 呼叫時,傳回錯誤給 APPC。 系統會透過 secondary_rc傳回作業系統傳回碼。 它會顯示在 Intel 位元組交換順序中。 如果問題仍然存在,請洽詢系統管理員。

    AP_DEALLOC_ABEND
    主要傳回碼;交談已因下列其中一個原因而解除配置:

  • 夥伴 TP 發出 MC_DEALLOCATE ,並將 dealloc_type 設定為 AP_ABEND。

  • 夥伴 TP 發生 ABEND,導致夥伴 LU 傳送 MC_DEALLOCATE 要求。

備註

根據 dealloc_type 參數的值,當 TP 發出 MC_DEALLOCATE時,交談可以是下表所示的其中一個狀態。

Dealloc_type 允許的狀態
AP_FLUSH SEND
AP_SYNC_LEVEL SEND
AP_ABEND 重設以外的任何狀態
AP_ABEND_PROG 重設以外的任何狀態
AP_ABEND_SVC 重設以外的任何狀態
AP_ABEND_TIMER 重設以外的任何狀態

下表中摘要說明的狀態變更是根據 primary_rc的值。

Primary_rc 新狀態
AP_OK RESET
AP_ALLOCATION_ERROR RESET
AP_CONV_FAILURE_RETRY RESET
AP_CONV_FAILURE_NO_RETRY RESET
AP_DEALLOC_ABEND RESET
AP_DEALLOC_ABEND_PROG RESET
AP_DEALLOC_ABEND_SVC RESET
AP_DEALLOC_ABEND_TIMER RESET
AP_PROG_ERROR_PURGING RECEIVE

解除配置交談之前,此動詞命令會執行下列其中一項動作:

  • MC_FLUSH,將本機 LU 的傳送緩衝區內容傳送給夥伴 LU (和 TP) 。

  • MC_CONFIRM,方法是將本機 LU 的傳送緩衝區內容和確認要求傳送給夥伴 TP。

    成功執行此動詞命令之後,交談識別碼就不再有效。

    LU 6.2 同步處理點可以使用稱為默示忘記密碼的訊息流程優化。 當通訊協定指定需要忘記的 PS 標頭時,會話下的下一個資料流程即表示已收到忘記。 在一般情況下,當資料在其中一個同步處理點交談上接收或傳送時,TP 會察覺下一個資料流程。

    不過,最後一個要傳送的訊息可能是因為交談已解除配置。 在此情況下,如果會話的下一個資料流程發生,則 TP 不會察覺。 為了提供此通知給 TP,會修改 MC_DEALLOCATE 動詞,以允許 tp 註冊將呼叫的回呼函式:

  • 在第一個正常流量傳輸 (要求或回應) 交談所使用的會話。

  • 如果會話在其他任何資料流程之前未系結。

  • 如果會話因為 DLC 中斷而異常結束。

    當叫用回呼函式時, MC_DEALLOCATE 動詞命令也包含可作為其中一個參數傳回的交互 欄位成員。 應用程式可以任何方式使用此參數 (例如,做為應用程式) 內控制項區塊的指標。

    TP 可以使用傳遞給回呼函式的 別參數,判斷訊息流程是否表示已收到隱含的忘記。

    請注意, MC_DEALLOCATE 動詞命令可能會在呼叫回呼常式之前完成。 交談會視為處於重設狀態,而且不會使用交談識別碼來發出進一步的動詞。 如果應用程式在會話的下一個資料流程之前發出 TP_ENDED 動詞命令,就不會叫用回呼常式。

    Host Integration Server 可讓 TPs 在傳送資料後立即解除配置交談,方法是在MC_SEND_DATA上指定類型參數做為 AP_SEND_DATA_DEALLOC_ *。 不過, MC_SEND_DATA 動詞未包含隱含的遺忘回呼函數。 要接收隱含忘記密碼通知的 TPs 必須明確地發出 MC_DEALLOCATE