Condividi tramite


MC_DEALLOCATE

Il verbo MC_DEALLOCATE dealloca una conversazione tra due programmi di transazione (TP).

La struttura seguente descrive il blocco di controllo verbo (VCB) usato dal verbo MC_DEALLOCATE verbo.

Sintassi

  
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];  
};  

Members

Opcode
Parametro fornito. Specifica il codice dell'operazione verbo, AP_M_DEALLOCATE.

opext
Parametro fornito. Specifica l'estensione dell'operazione verbo, AP_MAPPED_CONVERSATION.

reserv2
Campo riservato.

Primary_rc
Parametro restituito. Specifica il codice restituito primario impostato da APPC al completamento del verbo. I codici restituiti validi variano a seconda del verbo APPC rilasciato. Per questo verbo, vedere Codici restituiti per i codici di errore validi.

Secondary_rc
Parametro restituito. Specifica il codice restituito secondario impostato da APPC al completamento del verbo. I codici restituiti validi variano a seconda del verbo APPC rilasciato. Per questo verbo, vedere Codici restituiti per i codici di errore validi.

Tp_id
Parametro fornito. Identifica il TP locale. Il valore di questo parametro è stato restituito da TP_STARTED nella chiamata TP o da RECEIVE_ALLOCATE nel TP richiamato.

Conv_id
Parametro fornito. Identifica la conversazione stabilita tra i due provider di servizi. Il valore di questo parametro viene restituito da MC_ALLOCATE nella chiamata TP o da RECEIVE_ALLOCATE nel TP richiamato.

reserv3
Campo riservato.

dealloc_type
Parametro fornito. Specifica come eseguire la deallocazione.

Per MC_DEALLOCATE, usare AP_ABEND per deallocare la conversazione in modo anomalo. Se la conversazione è in stato SEND quando il TP locale MC_DEALLOCATE, APPC invia il contenuto del buffer di invio dell'unità logica locale al partner TP prima di deallocare la conversazione. Se la conversazione si trova nello stato RECEIVE o PENDING_POST, APPC elimina i dati in ingresso prima di deallocare la conversazione.

Un TP deve specificare AP_ABEND quando si verifica un errore che impedisce il completamento di una transazione.

AP_FLUSH invia il contenuto del buffer di invio dell'lu locale al tp partner prima di deallocare la conversazione. Questo valore è consentito solo se la conversazione è in stato SEND.

AP_SYNC_LEVEL usa il livello di sincronizzazione della conversazione (stabilito da MC_ALLOCATE) per determinare come deallocare la conversazione. Questo valore è consentito solo se la conversazione è in stato SEND.

Se il livello di sincronizzazione della conversazione è AP_NONE, APPC invia il contenuto del buffer di invio dell'lu locale al partner TP prima di deallocare la conversazione.

Se il livello di sincronizzazione è AP_CONFIRM_SYNC_LEVEL, APPC invia il contenuto del buffer di invio dell'lu locale e una richiesta di conferma al partner TP. Al momento della ricezione della conferma dal partner TP, APPC dealloca la conversazione. Se, tuttavia, il partner TP segnala un errore, la conversazione rimane allocata.

callback
Parametro fornito. Presente solo se il bit di AP_EXTD_VCB è impostato nel membro opext che indica il supporto per il punto di sincronizzazione. Questo parametro è l'indirizzo di una funzione di callback fornita dall'utente. Se questo campo è NULL, non verrà fornita alcuna notifica.

Il prototipo della routine di callback è il seguente:

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

La procedura di callback può accettare qualsiasi nome, poiché l'indirizzo della procedura viene passato alla DLL APPC. I parametri passati alla funzione sono i seguenti:

Vcb

Puntatore al blocco di controllo verbo MC_DEALLOCATE che ha causato la deallocazione della conversazione.

Tp_id

Identificatore TP del TP di proprietà della conversazione deallocata.

Conv_id

Identificatore della conversazione deallocata.

tipo

Tipo del flusso del messaggio che ha causato l'richiamare il callback. I valori possibili sono:

AP_DATA_FLOW

Flusso di dati normale nella sessione.

AP_UNBIND

La sessione non era in uscita normalmente.

AP_FAILURE

La sessione è stata terminata a causa di un'interruzione.

Correlatore

Questo valore è il correlatore specificato nel verbo MC_DEALLOCATE .

Correlatore
Parametro fornito. Presente solo se il bit di AP_EXTD_VCB è impostato nel membro opext che indica il supporto per l'API Punto di sincronizzazione. Questo campo correlatore consente al TP di specificare un valore che può usare per correlare una chiamata alla funzione di callback con, ad esempio, le proprie strutture di dati interne. Questo valore viene restituito al TP come uno dei parametri della routine di callback quando viene richiamato.

reserv4
Campo riservato.

Codici restituiti

AP_OK
Codice restituito primario; il verbo eseguito correttamente.

AP_PARAMETER_CHECK
Codice restituito primario; il verbo non è stato eseguito a causa di un errore di parametro.

AP_BAD_CONV_ID

Codice restituito secondario; il valore di conv_id non corrisponde a un identificatore di conversazione assegnato da APPC.

AP_BAD_TP_ID

Codice restituito secondario; il valore di tp_id non corrisponde a un identificatore TP assegnato da APPC.

AP_DEALLOC_BAD_TYPE

Codice restituito secondario; il parametro dealloc_type non è stato impostato su un valore valido.

AP_STATE_CHECK
Codice restituito primario; il verbo non è stato eseguito perché è stato rilasciato in uno stato non valido.

AP_DEALLOC_CONFIRM_BAD_STATE

Codice restituito secondario; la conversazione non era in stato SEND e il TP tentava di scaricare il buffer di invio e inviare una richiesta di conferma. Questo tentativo si è verificato perché il valore di dealloc_type era AP_SYNC_LEVEL e il livello di sincronizzazione della conversazione era AP_CONFIRM_SYNC_LEVEL.

AP_DEALLOC_FLUSH_BAD_STATE

Codice restituito secondario; la conversazione non era in stato SEND e il TP tentava di scaricare il buffer di invio. Questo tentativo si è verificato perché il valore di dealloc_type era AP_FLUSH o perché il valore di dealloc_type era AP_SYNC_LEVEL e il livello di sincronizzazione della conversazione era AP_NONE. In entrambi i casi, la conversazione deve essere in stato SEND.

AP_ALLOCATION_ERROR
Codice restituito primario; APPC non è riuscito a allocare una conversazione. Lo stato della conversazione è impostato su RESET.

Questo codice può essere restituito tramite un verbo rilasciato dopo MC_ALLOCATE.

AP_ALLOCATION_FAILURE_NO_RETRY

Codice restituito secondario; la conversazione non può essere allocata a causa di una condizione permanente, ad esempio un errore di configurazione o un errore del protocollo di sessione. Per determinare l'errore, l'amministratore di sistema deve esaminare il file di log degli errori. Non ripetere l'allocazione finché l'errore non è stato corretto.

AP_ALLOCATION_FAILURE_RETRY

Codice restituito secondario; Impossibile allocare la conversazione a causa di una condizione temporanea, ad esempio un errore di collegamento. Il motivo dell'errore viene registrato nel log degli errori di sistema. Riprovare l'allocazione.

AP_CONVERSATION_TYPE_MISMATCH

Codice restituito secondario; l'lu del partner o TP non supporta il tipo di conversazione (basic o mappato) specificato nella richiesta di allocazione.

AP_PIP_NOT_ALLOWED

Codice restituito secondario; la richiesta di allocazione specificata dati PIP, ma il TP partner non richiede questi dati o l'lu partner non lo supporta.

AP_PIP_NOT_SPECIFIED_CORRECTLY

Codice restituito secondario; il partner TP richiede dati PIP, ma la richiesta di allocazione non ha specificato dati PIP o un numero errato di parametri.

AP_SECURITY_NOT_VALID

Codice restituito secondario; l'identificatore utente o la password specificati nella richiesta di allocazione non sono stati accettati dall'LU partner.

AP_SYNC_LEVEL_NOT_SUPPORTED

Codice restituito secondario; il TP partner non supporta l'sync_level (AP_NONE o AP_CONFIRM_SYNC_LEVEL) specificato nella richiesta di allocazione o il sync_level non è stato riconosciuto.

AP_TP_NAME_NOT_RECOGNIZED

Codice restituito secondario; l'lu partner non riconosce il nome TP specificato nella richiesta di allocazione.

AP_TRANS_PGM_NOT_AVAIL_NO_RETRY

Codice restituito secondario; l'lu remoto ha rifiutato la richiesta di allocazione perché non è stato in grado di avviare il TP del partner richiesto. La condizione è permanente. Il motivo dell'errore può essere connesso al nodo remoto. Non ripetere l'allocazione finché l'errore non è stato corretto.

AP_TRANS_PGM_NOT_AVAIL_RETRY

Codice restituito secondario; l'lu remoto ha rifiutato la richiesta di allocazione perché non è stato in grado di avviare il TP del partner richiesto. La condizione può essere temporanea, ad esempio un timeout. Il motivo dell'errore può essere connesso al nodo remoto. Riprovare l'allocazione.

AP_COMM_SUBSYSTEM_ABENDED
Codice restituito primario; indica una delle condizioni seguenti:

  • Il nodo usato da questa conversazione ha rilevato un ABEND.

  • La connessione tra il tp e il nodo pu 2.1 è stata interrotta (errore LAN).

  • SnaBase nel computer TP ha rilevato un ABEND.

    L'amministratore di sistema deve esaminare il log degli errori per determinare il motivo di ABEND.

    AP_CONV_FAILURE_NO_RETRY
    Codice restituito primario; la conversazione è stata terminata a causa di una condizione permanente, ad esempio un errore del protocollo di sessione. L'amministratore di sistema deve esaminare il log degli errori di sistema per determinare la causa dell'errore. Non ripetere la conversazione finché l'errore non è stato corretto.

    AP_CONV_FAILURE_RETRY
    Codice restituito primario; la conversazione è stata terminata a causa di un errore temporaneo. Riavviare il TP per verificare se il problema si verifica di nuovo. In caso contrario, l'amministratore di sistema deve esaminare il log degli errori per determinare la causa dell'errore.

    AP_CONVERSATION_TYPE_MIXED
    Codice restituito primario; il TP ha rilasciato verbi di conversazione di base e mappati. È possibile rilasciare un solo tipo in una singola conversazione.

    AP_INVALID_VERB_SEGMENT
    Codice restituito primario; VCB esteso oltre la fine del segmento di dati.

    AP_PROG_ERROR_PURGING
    Codice restituito primario; mentre in RECEIVE, PENDING, PENDING_POST, CONFIRM, CONFIRM_SEND o CONFIRM_DEALLOCATE stato, il partner TP ha rilasciato MC_SEND_ERROR. I dati inviati ma non ancora ricevuti vengono eliminati.

    AP_STACK_TOO_SMALL
    Codice restituito primario; le dimensioni dello stack dell'applicazione sono troppo piccole per eseguire il verbo. Aumentare le dimensioni dello stack dell'applicazione.

    AP_CONV_BUSY
    Codice restituito primario; c'è solo un verbo di conversazione in sospeso alla volta su qualsiasi conversazione. Ciò può verificarsi se il TP locale ha più thread e più thread eseguono chiamate APPC usando la stessa conv_id.

    AP_THREAD_BLOCKING
    Codice restituito primario; il thread chiamante è già in una chiamata di blocco.

    AP_UNEXPECTED_DOS_ERROR
    Codice restituito primario; il sistema operativo ha restituito un errore all'APPC durante l'elaborazione di una chiamata APPC dal TP locale. Il codice restituito dal sistema operativo viene restituito tramite il secondary_rc. Viene visualizzato nell'ordine di scambio di byte Intel. Se il problema persiste, consultare l'amministratore di sistema.

    AP_DEALLOC_ABEND
    Codice restituito primario; la conversazione è stata deallocata per uno dei motivi seguenti:

  • Il partner TP ha rilasciato MC_DEALLOCATE con dealloc_type impostato su AP_ABEND .

  • Il partner TP ha rilevato un ABEND, causando l'invio di una richiesta di MC_DEALLOCATE da parte del partner LU.

Commenti

A seconda del valore del parametro dealloc_type , la conversazione può trovarsi in uno degli stati indicati nella tabella seguente quando i problemi TP MC_DEALLOCATE.

Dealloc_type Stato consentito
AP_FLUSH SEND
AP_SYNC_LEVEL SEND
AP_ABEND Qualsiasi stato tranne RESET
AP_ABEND_PROG Qualsiasi stato tranne RESET
AP_ABEND_SVC Qualsiasi stato tranne RESET
AP_ABEND_TIMER Qualsiasi stato tranne RESET

Le modifiche allo stato, riepilogate nella tabella seguente, sono basate sul valore dell'primary_rc.

Primary_rc Nuovo stato
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

Prima di deallocare la conversazione, questo verbo esegue l'equivalente di uno dei seguenti:

  • MC_FLUSH, inviando il contenuto del buffer di invio dell'lu locale al lu partner (e TP).

  • MC_CONFIRM, inviando il contenuto del buffer di invio dell'lu locale e una richiesta di conferma al tp del partner.

    Dopo l'esecuzione di questo verbo, l'identificatore della conversazione non è più valido.

    Il punto di sincronizzazione LU 6.2 può usare un'ottimizzazione dei flussi di messaggi noti come dimenticazioni implicite. Quando il protocollo specifica che è necessaria un'intestazione FORGET PS, il flusso di dati successivo nella sessione implica la ricezione di un'intestazione FORGET. Nella situazione normale, il tps è a conoscenza del flusso di dati successivo quando i dati vengono ricevuti o inviati in una delle conversazioni del punto di sincronizzazione.

    Tuttavia, è possibile che l'ultimo messaggio di flusso sia causato dalla deallocazione della conversazione. In questo caso, il tp non è a conoscenza quando si verifica il flusso di dati successivo nella sessione. Per fornire il tp con questa notifica, il verbo MC_DEALLOCATE viene modificato per consentire al tp di registrare una funzione di callback che verrà chiamata:

  • Nella prima trasmissione normale del flusso (richiesta o risposta) sulla sessione usata dalla conversazione.

  • Se la sessione non è associato prima di qualsiasi altro flusso di dati.

  • Se la sessione viene terminata in modo anomalo a causa di un'interruzione del DLC.

    Il verbo MC_DEALLOCATE contiene anche un membro del campo correlatore restituito come uno dei parametri quando viene richiamata la funzione di callback. L'applicazione può usare questo parametro in qualsiasi modo, ad esempio come puntatore a un blocco di controllo all'interno dell'applicazione.

    Il tp può usare il parametro di tipo passato alla funzione di callback per determinare se il flusso del messaggio indica che è stata ricevuta una dimenticazione implicita.

    Si noti che il verbo MC_DEALLOCATE probabilmente verrà completato prima che venga chiamata la routine di callback. La conversazione viene considerata in stato RESET e non è possibile eseguire altri verbi usando l'identificatore della conversazione. Se l'applicazione rilascia un verbo TP_ENDED prima del flusso di dati successivo nella sessione, la routine di callback non verrà richiamata.

    Host Integration Server consente ai provider di servizi di configurazione di deallocare le conversazioni immediatamente dopo l'invio dei dati specificando il parametro di tipo in MC_SEND_DATA come AP_SEND_DATA_DEALLOC_*. Tuttavia, i verbi MC_SEND_DATA non contengono la funzione di callback forget implicita. I provider di servizi di transazione che desiderano ricevere una notifica di dimenticanza implicita devono emettere MC_DEALLOCATE in modo esplicito.