DEALLOCATE

解除配置動詞 (TPs) 將兩個交易程式之間的交談 解除配置

下列結構描述 解除配置 動詞命令所使用的動詞控制項區塊 (VCB) 。

語法

  
struct 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 short       log_dlen;  
    unsigned char FAR *  log_dptr;  
    void                 (WINAPI *callback)();  
    void                 *correlator;  
    unsigned char        reserv6[4];  
};  

成員

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

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

reserv2
保留的欄位。

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

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

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

conv_id
提供的參數。 識別在這兩個 TPs 之間建立的交談。 此參數的值會在叫用 TP 中的 配置 ,或在叫用的 tp 中 RECEIVE_ALLOCATE 來傳回。

reserv3
保留的欄位。

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

使用下列其中一個值會異常解除配置對話:

  • AP_ABEND_PROG

  • AP_ABEND_SVC

  • AP_ABEND_TIMER

    如果在本機 TP 發出 解除配置時,交談處於傳送狀態,APPC 會在解除配置交談之前,將本機邏輯單元的 (LU 的內容傳送給夥伴 TP) 傳送緩衝區。 如果交談處於 RECEIVE 或 PENDING_POST 狀態,APPC 會先清除任何傳入的資料,再解除配置交談。

    當應用程式或服務 TP 遇到錯誤,導致交易成功完成時,應該指定 AP_ABEND_PROG。

    當服務 TP 遇到夥伴服務 TP 所造成的錯誤時,應該指定 AP_ABEND_SVC (例如,夥伴服務 TP) 傳送的控制項資訊中有格式錯誤。 當服務 TP 遇到要求立即解除配置的錯誤時,應該指定 AP_ABEND_TIMER (例如,在) 結束程式的運算子。

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

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

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

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

    log_dlen
    提供的參數。 指定要傳送至錯誤記錄檔的資料位元組數目。 範圍是從0到32767。

    如果 dealloc_type 設定為 AP_ABEND_PGM、AP_ABEND_SVC 或 AP_ABEND_TIMER,則可以將此參數設定為大於零的數位。 否則,此參數必須為零。

    log_dptr
    提供的參數。 提供包含錯誤資訊之資料緩衝區的位址。 資料會傳送至本機錯誤記錄檔和夥伴 LU。

    如果log_dlen大於零,則會使用這個參數。

    針對 Microsoft Windows,資料緩衝區可以位於靜態資料區域或全域配置區域中。 資料緩衝區必須完全符合此區域內的大小。

    針對 OS/2,記錄資料緩衝區必須位於未命名的共用區段上,此區段是由具有等於1之旗標的函式 DosAllocSeg 所配置。 記錄資料緩衝區必須完全符合區段。

    TP 必須將錯誤資料格式化為 GDS 錯誤記錄檔變數。 如需詳細資訊,請參閱 IBM SNA 手動 (s) 。

    回檔
    提供的參數。 只有在 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

導致解除配置交談之 解除配置 動詞控制項區塊的指標。

tp_id

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

conv_id

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

類型

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

AP_DATA_FLOW

會話上的標準資料流程。

AP_UNBIND

會話已正常解除系結。

AP_FAILURE

會話因為中斷而終止。

相關

這個值是在解除配置動詞命令上指定的交互

相關
提供的參數。 只有在 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_DEALLOC_LOG_LL_WRONG

次要傳回碼;GDS 錯誤記錄變數的 LL 欄位不符合記錄資料的實際長度。

AP_INVALID_DATA_SEGMENT

次要傳回碼;記錄檔的錯誤資料長度超過配置用來包含錯誤資料的區段,或錯誤資料緩衝區的位址錯誤。

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_DEALLOC_NOT_LL_BDY

次要傳回碼;交談處於傳送狀態,且 TP 未完成傳送邏輯記錄。 Dealloc_type參數設定為 AP_SYNC_LEVEL 或 AP_FLUSH。

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

您可以透過在 配置之後發出的動詞命令來傳回此程式碼。

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_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 發出 SEND_ERRORerr_type 設定為 [AP_PROG]。 已清除傳送但尚未接收的資料。

    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_PROG
    主要傳回碼;交談已因下列其中一個原因而解除配置:

  • 夥伴 TP 發出 解除配置dealloc_type 設定為 AP_ABEND_PROG。

  • 夥伴 TP 發生 ABEND,導致夥伴 LU 傳送 解除配置 要求。

    AP_DEALLOC_ABEND_SVC
    主要傳回碼;交談已解除配置,因為夥伴 TP 發行了dealloc_type設定為 AP_ABEND_SVC 的解除配置

    AP_DEALLOC_ABEND_TIMER
    主要傳回碼;交談已解除配置,因為夥伴 TP 發行了dealloc_type設定為 AP_ABEND_TIMER 的解除配置

    AP_SVC_ERROR_PURGING
    主要傳回碼;夥伴 TP (或夥伴 LU) 發出 SEND_ERRORerr_type 在接收、AP_SVC、確認、PENDING_POST 或 CONFIRM_SEND 狀態中設定為 CONFIRM_DEALLOCATE。 傳送給夥伴 TP 的資料可能已被清除。

備註

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

dealloc_type 允許的狀態
AP_FLUSH SEND
AP_SYNC_LEVEL SEND
AP_ABEND 除了 RESET 以外的任何
AP_ABEND_PROG 除了 RESET 以外的任何
AP_ABEND_SVC 除了 RESET 以外的任何
AP_ABEND_TIMER 除了 RESET 以外的任何

下表中摘要說明的狀態變更是根據 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
AP_SVC_ERROR_PURGING RECEIVE

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

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

  • 藉由將本機 LU 的傳送緩衝區內容和確認要求傳送給夥伴 TP 來確認

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

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

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

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

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

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

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

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

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

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