DEALLOCATE
Das Verb DEALLOCATE ordnet eine Konversation zwischen zwei Transaktionsprogrammen (TPs) zu.
Die folgende Struktur beschreibt den Verb-Steuerelementblock (VCB), der vom Verb DEALLOCATE verwendet wird.
Syntax
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];
};
Member
opcode
Angegebener Parameter. Gibt den Code des Verbvorgangs an, AP_B_DEALLOCATE.
opext
Angegebener Parameter. Gibt die Verbvorgangserweiterung an, AP_BASIC_CONVERSATION.
reserv2
Ein reserviertes Feld.
primary_rc
Zurückgegebener Parameter. Gibt den primären Rückgabecode an, der von APPC nach Abschluss des Verbs festgelegt wird. Die gültigen Rückgabecodes variieren je nach ausgegebenem APPC-Verb. Gültige Fehlercodes für dieses Verb finden Sie unter „Rückgabecodes“.
secondary_rc
Zurückgegebener Parameter. Gibt den sekundären Rückgabecode an, der von APPC nach Abschluss des Verbs festgelegt wird. Die gültigen Rückgabecodes variieren je nach ausgegebenem APPC-Verb. Gültige Fehlercodes für dieses Verb finden Sie unter „Rückgabecodes“.
tp_id
Angegebener Parameter. Identifiziert den lokalen TP. Der Wert dieses Parameters wurde von TP_STARTED im aufrufenden TP oder von RECEIVE_ALLOCATE im aufgerufenen TP zurückgegeben.
conv_id
Angegebener Parameter. Identifiziert die Konversation, die zwischen den beiden TPs eingerichtet wurde. Der Wert dieses Parameters wird von ALLOCATE im aufrufenden TP oder von RECEIVE_ALLOCATE im aufgerufenen TP zurückgegeben.
reserv3
Ein reserviertes Feld.
dealloc_type
Angegebener Parameter. Gibt an, wie die Deallocation ausgeführt wird.
Wenn Sie einen der folgenden Werte verwenden, wird die Konversation ungewöhnlich zugeordnet:
AP_ABEND_PROG
AP_ABEND_SVC
AP_ABEND_TIMER
Wenn sich die Unterhaltung im SEND-Zustand befindet, wenn der lokale TP DEALLOCATE ausgibt, sendet APPC den Inhalt des Sendepuffers der lokalen logischen Einheit (LU) an den Partner-TP, bevor die Konversation zugeordnet wird. Wenn sich die Unterhaltung im Status RECEIVE oder PENDING_POST befindet, löscht APPC alle eingehenden Daten, bevor die Konversation zugeordnet wird.
Ein Anwendungs- oder Dienst-TP sollte AP_ABEND_PROG angeben, wenn ein Fehler auftritt, der den erfolgreichen Abschluss einer Transaktion verhindert.
Ein Dienst-TP sollte AP_ABEND_SVC angeben, wenn ein Fehler auftritt, der von seinem Partnerdienst-TP verursacht wird (z. B. ein Formatfehler in den vom Partnerdienst-TP gesendeten Steuerinformationen). Ein Dienst-TP sollte AP_ABEND_TIMER angeben, wenn ein Fehler auftritt, der eine sofortige Zuordnung erfordert (z. B. ein Operator, der das Programm vorzeitig beendet).
AP_FLUSH sendet den Inhalt des Sendepuffers der lokalen LU an den Partner-TP, bevor die Konversation zugeordnet wird. Dieser Wert ist nur zulässig, wenn sich die Unterhaltung im SEND-Zustand befindet.
AP_SYNC_LEVEL verwendet die Synchronisierungsebene der Konversation (festgelegt durch ALLOCATE), um zu bestimmen, wie die Konversation zugeordnet werden soll. Dieser Wert ist nur zulässig, wenn sich die Unterhaltung im SEND-Zustand befindet.
Wenn die Synchronisierungsebene der Unterhaltung AP_NONE ist, sendet APPC den Inhalt des Sendepuffers der lokalen LU an den Partner-TP, bevor die Konversation zugewiesen wird.
Wenn die Synchronisierungsebene AP_CONFIRM_SYNC_LEVEL ist, sendet APPC den Inhalt des Sendepuffers der lokalen LU sowie eine Bestätigungsanforderung an den Partner-TP. Nach Erhalt der Bestätigung vom Partner TP, appciert die Zuordnung der Konversation. Wenn der Partner-TP jedoch einen Fehler meldet, bleibt die Konversation zugeordnet.
log_dlen
Angegebener Parameter. Gibt die Anzahl der Datenbytes an, die an die Fehlerprotokolldatei gesendet werden sollen. Der Bereich reicht von 0 bis 32767.Sie können diesen Parameter auf eine Zahl größer als null festlegen, wenn dealloc_type auf AP_ABEND_PGM, AP_ABEND_SVC oder AP_ABEND_TIMER festgelegt ist. Andernfalls muss dieser Parameter 0 sein.
log_dptr
Angegebener Parameter. Stellt die Adresse des Datenpuffers bereit, der Fehlerinformationen enthält. Die Daten werden an das lokale Fehlerprotokoll und an die Partner-LU gesendet.Dieser Parameter wird von DEALLOCATE verwendet, wenn log_dlen größer als 0 ist.
Bei Microsoft Windows kann sich der Datenpuffer in einem statischen Datenbereich oder in einem global zugeordneten Bereich befinden. Der Datenpuffer muss vollständig in diesen Bereich passen.
Für OS/2 muss sich der Protokolldatenpuffer in einem unbenannten, freigegebenen Segment befinden, das von der Funktion DosAllocSeg mit Flags gleich 1 zugeordnet wird. Der Protokolldatenpuffer muss vollständig auf das Segment passen.
Der TP muss die Fehlerdaten als GDS-Fehlerprotokollvariable formatieren. Weitere Informationen finden Sie in Ihrem IBM SNA-Handbuch.For more information, see your IBM SNA manual(s).
Rückruf
Angegebener Parameter. Nur vorhanden, wenn das AP_EXTD_VCB Bit im opext-Element festgelegt ist, was die Unterstützung für den Synchronisierungspunkt angibt. Dieser Parameter ist die Adresse einer vom Benutzer bereitgestellten Rückruffunktion. Wenn dieses Feld NULL ist, wird keine Benachrichtigung bereitgestellt.Der Prototyp der Rückrufroutine sieht wie folgt aus:
void WINAPI callback_proc(
struct appc_hdr *vcb,
unsigned char tp_id[8],
unsigned long conv_id,
unsigned short type,
void *correlator
);
Die Rückrufprozedur kann einen beliebigen Namen annehmen, da die Adresse der Prozedur an die APPC-DLL übergeben wird. Die an die Funktion übergebenen Parameter lauten wie folgt:
Vcb
Ein Zeiger auf den DEALLOCATE-Verb-Steuerelementblock , der dazu führte, dass die Konversation zugeordnet wurde.
tp_id
Der TP-Bezeichner des TP, dem die zugeordnete Konversation gehört.
conv_id
Der Konversationsbezeichner der zugeordneten Unterhaltung.
Typ
Der Typ des Nachrichtenflusses, durch den der Rückruf aufgerufen wurde. Mögliche Werte:
AP_DATA_FLOW
Normaler Datenfluss in der Sitzung.
AP_UNBIND
Die Sitzung war normal ungebunden.
AP_FAILURE
Die Sitzung wurde aufgrund eines Ausfalls beendet.
Korrelator
Dieser Wert ist der Korrelator , der für das Verb DEALLOCATE angegeben ist.
Korrelator
Angegebener Parameter. Nur vorhanden, wenn das AP_EXTD_VCB Bit im opext-Member festgelegt ist, was die Unterstützung für die Synchronisierungspunkt-API angibt. Dieses Korrelatorfeld ermöglicht es dem TP, einen Wert anzugeben, mit dem ein Aufruf der Rückruffunktion z. B. mit seinen eigenen internen Datenstrukturen korreliert werden kann. Dieser Wert wird an den TP als einer der Parameter der Rückrufroutine zurückgegeben, wenn er aufgerufen wird.
reserv4
Ein reserviertes Feld.
Rückgabecodes
AP_OK
Primärer Rückgabecode; das Verb wurde erfolgreich ausgeführt.
AP_PARAMETER_CHECK
Primärer Rückgabecode; das Verb wurde aufgrund eines Parameterfehlers nicht ausgeführt.
AP_BAD_CONV_ID
Sekundärer Rückgabecode; Der Wert von conv_id stimmte nicht mit einem von APPC zugewiesenen Konversationsbezeichner überein.
AP_BAD_TP_ID
Sekundärer Rückgabecode; Der Wert von tp_id stimmte nicht mit einem TP-Bezeichner überein, der von APPC zugewiesen wurde.
AP_DEALLOC_BAD_TYPE
Sekundärer Rückgabecode; Der parameter dealloc_type wurde nicht auf einen gültigen Wert festgelegt.
AP_DEALLOC_LOG_LL_WRONG
Sekundärer Rückgabecode; Das LL-Feld der GDS-Fehlerprotokollvariable stimmte nicht mit der tatsächlichen Länge der Protokolldaten überein.
AP_INVALID_DATA_SEGMENT
Sekundärer Rückgabecode; Die Fehlerdaten für die Protokolldatei waren länger als das Segment, das die Fehlerdaten enthalten soll, oder die Adresse des Fehlerdatenpuffers war falsch.
AP_STATE_CHECK
Primärer Rückgabecode; das Verb wurde nicht ausgeführt, da es in einem ungültigen Zustand ausgegeben wurde.
AP_DEALLOC_CONFIRM_BAD_STATE
Sekundärer Rückgabecode; Die Unterhaltung befand sich nicht im SEND-Zustand, und der TP versuchte, den Sendepuffer zu leeren und eine Bestätigungsanforderung zu senden. Dieser Versuch ist aufgetreten, weil der Wert von dealloc_type AP_SYNC_LEVEL und die Synchronisierungsebene der Unterhaltung AP_CONFIRM_SYNC_LEVEL wurde.
AP_DEALLOC_FLUSH_BAD_STATE
Sekundärer Rückgabecode; Die Unterhaltung befand sich nicht im SEND-Zustand, und der TP versuchte, den Sendepuffer zu leeren. Dieser Versuch ist aufgetreten, weil der Wert von dealloc_type AP_FLUSH lautete oder weil der Wert von dealloc_type AP_SYNC_LEVEL und die Synchronisierungsebene der Konversation AP_NONE lautete. In beiden Fällen muss sich die Konversation im SEND-Zustand befinden.
AP_DEALLOC_NOT_LL_BDY
Sekundärer Rückgabecode; Die Unterhaltung befand sich im SEND-Zustand, und das TP hat das Senden eines logischen Datensatzes nicht abgeschlossen. Der dealloc_type-Parameter war auf AP_SYNC_LEVEL oder AP_FLUSH festgelegt.
AP_ALLOCATION_ERROR
Primärer Rückgabecode; APPC konnte eine Unterhaltung nicht zuordnen. Der Unterhaltungszustand ist auf ZURÜCKSETZEN festgelegt.
Dieser Code kann über ein Verb zurückgegeben werden, das nach ALLOCATE ausgegeben wurde.
AP_ALLOCATION_FAILURE_NO_RETRY
Sekundärer Rückgabecode; Die Konversation kann aufgrund einer permanenten Bedingung nicht zugeordnet werden, z. B. aufgrund eines Konfigurations- oder Sitzungsprotokollfehlers. Um den Fehler zu ermitteln, sollte der Systemadministrator sollte das Fehlerprotokoll untersuchen. Wiederholen Sie die Zuordnung erst, wenn der Fehler behoben wurde.
AP_ALLOCATION_FAILURE_RETRY
Sekundärer Rückgabecode; Die Konversation konnte aufgrund einer temporären Bedingung, z. B. eines Linkfehlers, nicht zugeordnet werden. Der Grund für den Fehler wird im Systemfehlerprotokoll protokolliert. Wiederholen Sie die Zuordnung.
AP_CONVERSATION_TYPE_MISMATCH
Sekundärer Rückgabecode; die Partner-LU oder TP unterstützt den in der Zuordnungsanforderung angegebenen Konversationstyp (basic oder mapped) nicht.
AP_PIP_NOT_ALLOWED
Sekundärer Rückgabecode; In der Zuordnungsanforderung wurden PIP-Daten angegeben, aber entweder erfordert das Partner-TP diese Daten nicht, oder die Partner-LU unterstützt sie nicht.
AP_PIP_NOT_SPECIFIED_CORRECTLY
Sekundärer Rückgabecode; Der Partner-TP erfordert PIP-Daten, aber die Zuordnungsanforderung hat entweder keine PIP-Daten oder eine falsche Anzahl von Parametern angegeben.
AP_SECURITY_NOT_VALID
Sekundärer Rückgabecode; Die in der Zuordnungsanforderung angegebene Benutzer-ID oder das Kennwort wurde von der Partner-LU nicht akzeptiert.
AP_SYNC_LEVEL_NOT_SUPPORTED
Sekundärer Rückgabecode; der Partner-TP unterstützt die in der Zuordnungsanforderung angegebene sync_level (AP_NONE oder AP_CONFIRM_SYNC_LEVEL) nicht, oder die sync_level wurde nicht erkannt.
AP_TP_NAME_NOT_RECOGNIZED
Sekundärer Rückgabecode; Die Partner-LU erkennt den in der Zuordnungsanforderung angegebenen TP-Namen nicht.
AP_TRANS_PGM_NOT_AVAIL_NO_RETRY
Sekundärer Rückgabecode; Die Remote-LU hat die Zuordnungsanforderung abgelehnt, da sie den angeforderten Partner-TP nicht starten konnte. Die Bedingung ist permanent. Der Grund für den Fehler wird möglicherweise auf dem Remoteknoten protokolliert. Wiederholen Sie die Zuordnung erst, wenn der Fehler behoben wurde.
AP_TRANS_PGM_NOT_AVAIL_RETRY
Sekundärer Rückgabecode; Die Remote-LU hat die Zuordnungsanforderung abgelehnt, da sie den angeforderten Partner-TP nicht starten konnte. Die Bedingung kann temporär sein, z. B. ein Timeout. Der Grund für den Fehler wird möglicherweise auf dem Remoteknoten protokolliert. Wiederholen Sie die Zuordnung.
AP_COMM_SUBSYSTEM_ABENDED
Primärer Rückgabecode; weist darauf hin, dass eine der folgenden Bedingungen aufgetreten ist:
Der von dieser Konversation verwendete Knoten hat einen ABEND gefunden.
Die Verbindung zwischen dem TP und dem PU 2.1-Knoten wurde unterbrochen (LAN-Fehler).
SnaBase auf dem Computer des TP hat einen ABEND gefunden.
Der Systemadministrator sollte das Fehlerprotokoll untersuchen, um den Grund für den ABEND zu ermitteln.
AP_COMM_SUBSYSTEM_NOT_LOADED
Primärer Rückgabecode; eine erforderliche Komponente konnte während der Verarbeitung des Verbs nicht geladen oder beendet werden. Folglich konnte die Kommunikation nicht stattfinden. Wenden Sie sich an den Systemadministrator, um Korrekturmaßnahmen zu ergreifen.AP_CONV_FAILURE_NO_RETRY
Primärer Rückgabecode; Die Konversation wurde aufgrund einer permanenten Bedingung beendet, z. B. aufgrund eines Sitzungsprotokollfehlers. Der Systemadministrator sollte das Systemfehlerprotokoll untersuchen, um die Ursache des Fehlers zu ermitteln. Wiederholen Sie die Konversation erst, wenn der Fehler behoben wurde.AP_CONV_FAILURE_RETRY
Primärer Rückgabecode; Die Unterhaltung wurde aufgrund eines temporären Fehlers beendet. Starten Sie den TP neu, um festzustellen, ob das Problem erneut auftritt. Wenn dies der Fall ist, sollte der Systemadministrator das Fehlerprotokoll untersuchen, um die Ursache des Fehlers zu ermitteln.AP_CONVERSATION_TYPE_MIXED
Primärer Rückgabecode; der TP hat sowohl grundlegende als auch zugeordnete Konversationsverben ausgegeben. In einer einzelnen Unterhaltung kann nur ein Typ ausgegeben werden.AP_INVALID_VERB_SEGMENT
Primärer Rückgabecode; der VCB wurde über das Ende des Datensegments hinaus erweitert.AP_PROG_ERROR_PURGING
Primärer Rückgabecode; Im Status RECEIVE, PENDING, PENDING_POST, CONFIRM, CONFIRM_SEND oder CONFIRM_DEALLOCATE hat der Partner tp SEND_ERROR ausgestellt, wobei err_type auf AP_PROG festgelegt ist. Gesendete, aber noch nicht empfangene Daten werden gelöscht.AP_STACK_TOO_SMALL
Primärer Rückgabecode; die Stapelgröße der Anwendung ist zu klein, um das Verb auszuführen. Vergrößern Sie die Stapelgröße Ihrer Anwendung.AP_CONV_BUSY
Primärer Rückgabecode; es kann jeweils nur ein ausstehendes Konversationsverb gleichzeitig geben. Dies kann auftreten, wenn das lokale TP über mehrere Threads verfügt und mehr als ein Thread APPC-Aufrufe mit demselben conv_id ausgibt.AP_THREAD_BLOCKING
Primärer Rückgabecode; der aufrufende Thread befindet sich bereits in einem blockierenden Aufruf.AP_UNEXPECTED_DOS_ERROR
Primärer Rückgabecode; das Betriebssystem hat bei der Verarbeitung eines APPC-Aufrufs vom lokalen TP einen Fehler an APPC zurückgegeben. Der Rückgabecode des Betriebssystems wurde über secondary_rc zurückgegeben. Er wird in Intel-Bytetauschreihenfolge angezeigt. Wenn das Problem weiterhin besteht, wenden Sie sich an Ihren Systemadministrator.AP_DEALLOC_ABEND_PROG
Primärer Rückgabecode; Die Zuordnung der Unterhaltung wurde aus einem der folgenden Gründe aufgehoben:Der Partner-TP hat DEALLOCATE mit dealloc_type ausgestellt, der auf AP_ABEND_PROG festgelegt ist.
Der Partner-TP ist auf ein ABEND-Ereignis gestoßen, sodass die Partner-LU eine DEALLOCATE-Anforderung sendet.
AP_DEALLOC_ABEND_SVC
Primärer Rückgabecode; Die Zuordnung der Unterhaltung wurde aufgehoben, weil der Partner tp DEALLOCATE ausgestellt hat, wobei dealloc_type auf AP_ABEND_SVC festgelegt ist.AP_DEALLOC_ABEND_TIMER
Primärer Rückgabecode; Die Zuordnung der Unterhaltung wurde aufgehoben, weil der Partner-TP DEALLOCATE ausgestellt hat, wobei dealloc_type auf AP_ABEND_TIMER festgelegt ist.AP_SVC_ERROR_PURGING
Primärer Rückgabecode; die Partner-TP (oder Partner-LU), die SEND_ERROR ausgestellt hat, wobei err_type im Status RECEIVE, PENDING_POST, CONFIRM, CONFIRM_SEND oder CONFIRM_DEALLOCATE auf AP_SVC festgelegt ist. Daten, die an die Partner-TP gesendet wurden, wurden möglicherweise gelöscht.
Hinweise
Abhängig vom Wert des dealloc_type-Parameters kann sich die Konversation in einem der in der folgenden Tabelle angegebenen Zustände befinden, wenn der TP DEALLOCATE ausgibt.
dealloc_type | Zulässiger Status |
---|---|
AP_FLUSH | SEND |
AP_SYNC_LEVEL | SEND |
AP_ABEND | Alle außer RESET |
AP_ABEND_PROG | Alle außer RESET |
AP_ABEND_SVC | Alle außer RESET |
AP_ABEND_TIMER | Alle außer RESET |
Zustandsänderungen, die in der folgenden Tabelle zusammengefasst sind, basieren auf dem Wert der primary_rc.
primary_rc | Neuer Zustand |
---|---|
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 |
Vor dem Aufheben der Zuordnung der Konversation führt dieses Verb die Entsprechung einer der folgenden Auswertewerte aus:
FLUSH, indem der Inhalt des Sendepuffers der lokalen LU an die Partner-LU (und TP) gesendet wird.
BESTÄTIGEN Sie, indem Sie den Inhalt des Sendepuffers der lokalen LU und eine Bestätigungsanforderung an den Partner-TP senden.
Nachdem dieses Verb erfolgreich ausgeführt wurde, ist der Unterhaltungsbezeichner nicht mehr gültig.
Lu 6.2-Synchronisierungspunkt kann eine Optimierung der Nachrichtenflüsse verwenden, die als implizites Vergessen bezeichnet werden. Wenn das Protokoll angibt, dass ein FORGET PS-Header erforderlich ist, impliziert der nächste Datenfluss in der Sitzung, dass ein FORGET empfangen wurde. In der normalen Situation erkennt das TP den nächsten Datenfluss, wenn Daten in einer seiner Synchronisierungspunktunterhaltungen empfangen oder gesendet werden.
Es ist jedoch möglich, dass die letzte Nachricht, die gesendet werden soll, durch die Aufhebung der Zuordnung der Konversation verursacht wird. In diesem Fall ist dem TP nicht bekannt, wann der nächste Datenfluss in der Sitzung auftritt. Um dem TP diese Benachrichtigung bereitzustellen, wird das Verb DEALLOCATE so geändert, dass der TP eine Rückruffunktion registrieren kann, die aufgerufen wird:
Bei der ersten normalen Flussübertragung (Anforderung oder Antwort) über die sitzung, die von der Konversation verwendet wird.
Wenn die Sitzung vor anderen Datenflüssen ungebunden ist.
Wenn die Sitzung aufgrund eines DLC-Ausfalls ungewöhnlich beendet wird.
Das Verb DEALLOCATE enthält auch einen Korrelatorfeldmember , der als einer der Parameter zurückgegeben wird, wenn die Rückruffunktion aufgerufen wird. Die Anwendung kann diesen Parameter in beliebiger Weise verwenden (z. B. als Zeiger auf einen Kontrollblock innerhalb der Anwendung).
Der TP kann den an die Rückruffunktion übergebenen Typparameter verwenden, um zu bestimmen, ob der Nachrichtenfluss darauf hinweist, dass ein implizites Vergessen empfangen wurde.
Beachten Sie, dass das Verb DEALLOCATE wahrscheinlich abgeschlossen wird, bevor die Rückrufroutine aufgerufen wird. Die Konversation wird als zurückgesetzt betrachtet, und es können keine weiteren Verben mit dem Unterhaltungsbezeichner ausgegeben werden. Wenn die Anwendung vor dem nächsten Datenfluss in der Sitzung ein TP_ENDED Verb ausgibt, wird die Rückrufroutine nicht aufgerufen.
Host Integration Server ermöglicht TPs das Aufheben der Zuordnung von Unterhaltungen unmittelbar nach dem Senden von Daten, indem der Typparameter auf SEND_DATA als AP_SEND_DATA_DEALLOC_* angegeben wird. Die SEND_DATA Verben enthalten jedoch nicht die implizite Rückruffunktion für das Vergessen. TPs, die eine implizite Benachrichtigung über das Vergessen erhalten möchten, müssen DEALLOCATE explizit ausgeben.