Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das VERB DEALLOCATE verwechselt eine Unterhaltung zwischen zwei Transaktionsprogrammen (TPs).
Die folgende Struktur beschreibt den verbsteuerungsblock (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];
};
Elemente
Opcode
Angegebener Parameter. Gibt den Verbvorgangscode AP_B_DEALLOCATE an.
opext
Angegebener Parameter. Gibt die Verbvorgangserweiterung AP_BASIC_CONVERSATION an.
reserv2
Ein reserviertes Feld.
primary_rc
Zurückgegebener Parameter. Gibt den primären Rückgabecode an, der von APPC am Ende des Verbs festgelegt wurde. Die gültigen Rückgabecodes variieren je nach ausgegebenen APPC-Verb. Informationen zu gültigen Fehlercodes für dieses Verb finden Sie unter "Rückgabecodes".
secondary_rc
Zurückgegebener Parameter. Gibt den von APPC festgelegten sekundären Rückgabecode am Ende des Verbs an. Die gültigen Rückgabecodes variieren je nach ausgegebenen APPC-Verb. Informationen zu gültigen Fehlercodes für dieses Verb finden Sie unter "Rückgabecodes".
tp_id
Angegebener Parameter. Identifiziert das lokale 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 Zwischenunterhaltung zwischen den beiden TPs. Der Wert dieses Parameters wird von ALLOCATE im aufgerufenen 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.
Die Verwendung eines der folgenden Werte behandelt die Unterhaltung ungewöhnlich:
AP_ABEND_PROG
AP_ABEND_SVC
AP_ABEND_TIMER
Wenn sich die Unterhaltung im SEND-Zustand befindet, wenn die lokale TP DEALLOCATE ausgibt, sendet APPC den Inhalt der lokalen logischen Einheit (LU) senden Puffer an den Partner-TP, bevor die Unterhaltung zugeordnet wird. Wenn sich die Unterhaltung im STATUS "EMPFANGEN" oder "PENDING_POST" befindet, löscht APPC alle eingehenden Daten, bevor sie die Unterhaltung verlagern.
Eine Anwendung oder ein 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 durch seinen Partnerdienst-TP verursacht wird (z. B. ein Formatfehler in den Vom Partnerdienst-TP gesendeten Steuerelementinformationen). Ein Dienst-TP sollte AP_ABEND_TIMER angeben, wenn ein Fehler auftritt, der eine sofortige Deallocation 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 Unterhaltung zugeordnet wird. Dieser Wert ist nur zulässig, wenn sich die Unterhaltung im SEND-Zustand befindet.
AP_SYNC_LEVEL verwendet die Synchronisierungsebene der Unterhaltung (festgelegt durch ZUWEISEN), um zu bestimmen, wie die Unterhaltung 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 Unterhaltung zugeordnet wird.
Wenn die Synchronisierungsebene AP_CONFIRM_SYNC_LEVEL ist, sendet APPC den Inhalt des Sendepuffers der lokalen LU und eine Bestätigungsanforderung an den Partner-TP. Nach Erhalt der Bestätigung durch den Partner TP verwechselt APPC die Unterhaltung. Wenn der Partner TP jedoch einen Fehler meldet, bleibt die Unterhaltung zugeordnet.
log_dlen
Angegebener Parameter. Gibt die Anzahl der Bytes an, die an die Fehlerprotokolldatei gesendet werden sollen. Der Bereich liegt zwischen 0 und 32767.Sie können diesen Parameter auf eine Zahl festlegen, die größer als Null ist, wenn dealloc_type auf AP_ABEND_PGM, AP_ABEND_SVC oder AP_ABEND_TIMER festgelegt ist. Andernfalls muss dieser Parameter null 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 Null ist.
Für Microsoft Windows kann sich der Datenpuffer in einem statischen Datenbereich oder in einem global zugewiesenen Bereich befinden. Der Datenpuffer muss vollständig in diesen Bereich passen.
Für Betriebssystem/2 muss sich der Protokolldatenpuffer in einem nicht benannten freigegebenen Segment befinden, das von der Funktion DosAllocSeg mit Flags gleich 1 zugewiesen wird. Der Protokolldatenpuffer muss vollständig in das Segment passen.
Der TP muss die Fehlerdaten als GDS-Fehlerprotokollvariable formatieren. Weitere Informationen finden Sie in Ihren IBM SNA-Handbüchern.For more information, see your IBM SNA manual(s).
callback
Angegebener Parameter. Nur vorhanden, wenn das AP_EXTD_VCB Bit im opext-Element festgelegt ist und die Unterstützung für 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 lautet wie folgt:
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 Unterhaltung deallocated wurde.
tp_id
Der TP-Bezeichner des TP, dem die Deallocated-Unterhaltung gehört.
conv_id
Der Unterhaltungsbezeichner der Deallocated-Unterhaltung.
Typ
Der Typ des Nachrichtenflusses, der dazu führte, dass 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 im VERB DEALLOCATE angegebene Korrelator.
Korrelator
Angegebener Parameter. Nur vorhanden, wenn das AP_EXTD_VCB Bit im opext-Element festgelegt ist, das die Unterstützung für die Synchronisierungspunkt-API angibt. Mit diesem Korrelatorfeld kann der TP einen Wert angeben, mit dem er einen Aufruf an die Rückruffunktion korrelieren kann, z. B. mit eigenen internen Datenstrukturen. Dieser Wert wird beim Aufrufen als parameter der Rückrufroutine an den TP zurückgegeben.
reserv4
Ein reserviertes Feld.
Rückgabecodes
AP_OK
Primärer Rückgabecode; das Verb erfolgreich ausgeführt wurde.
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 nicht mit einem Unterhaltungsbezeichner übereinstimmt, der von APPC zugewiesen wurde.
AP_BAD_TP_ID
Sekundärer Rückgabecode; der Wert von tp_id nicht mit einem TP-Bezeichner übereinstimmt, 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 nicht mit der tatsächlichen Länge der Protokolldaten übereinstimmte.
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, weil es in einem ungültigen Zustand ausgegeben wurde.
AP_DEALLOC_CONFIRM_BAD_STATE
Sekundärer Rückgabecode; die Unterhaltung war nicht im SEND-Zustand, und der TP hat versucht, den Sendepuffer zu leeren und eine Bestätigungsanforderung zu senden. Dieser Versuch ist aufgetreten, da der Wert 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 war nicht im SEND-Zustand, und der TP hat versucht, den Sendepuffer zu leeren. Dieser Versuch ist aufgetreten, weil der Wert von dealloc_type AP_FLUSH war oder weil der Wert der dealloc_type AP_SYNC_LEVEL und die Synchronisierungsebene der Unterhaltung AP_NONE wurde. In beiden Fällen muss sich die Unterhaltung im SEND-Zustand befinden.
AP_DEALLOC_NOT_LL_BDY
Sekundärer Rückgabecode; die Unterhaltung im SEND-Zustand war, und der TP hat das Senden eines logischen Datensatzes nicht abgeschlossen. Der parameter dealloc_type wurde 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 RESET festgelegt.
Dieser Code kann über ein Verb zurückgegeben werden, das nach ZUWEISUNG ausgegeben wurde.
AP_ALLOCATION_FAILURE_NO_RETRY
Sekundärer Rückgabecode; die Unterhaltung kann aufgrund einer dauerhaften Bedingung nicht zugewiesen werden, z. B. aufgrund eines Konfigurationsfehlers oder sitzungsprotokollfehlers. Um den Fehler zu ermitteln, sollte der Systemadministrator die Fehlerprotokolldatei untersuchen. Wiederholen Sie die Zuordnung erst, wenn der Fehler behoben wurde.
AP_ALLOCATION_FAILURE_RETRY
Sekundärer Rückgabecode; die Unterhaltung konnte aufgrund einer temporären Bedingung, z. B. aufgrund eines Verknüpfungsfehlers, nicht zugewiesen 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 Unterhaltungstyp (einfach oder zugeordnet) nicht.
AP_PIP_NOT_ALLOWED
Sekundärer Rückgabecode; Die zuordnungsanforderung angegebene PIP-Daten, aber entweder der Partner TP erfordert 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 angegebenen 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 dauerhaft. Der Grund für den Fehler kann auf dem Remoteknoten protokolliert werden. 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 vorübergehend sein, z. B. ein Timeout. Der Grund für den Fehler kann auf dem Remoteknoten protokolliert werden. Wiederholen Sie die Zuordnung.
AP_COMM_SUBSYSTEM_ABENDED
Primärer Rückgabecode; gibt eine der folgenden Bedingungen an:
Der von dieser Unterhaltung verwendete Knoten hat einen ABEND gefunden.
Die Verbindung zwischen dem TP und dem PU 2.1-Knoten wurde unterbrochen (LAN-Fehler).
Die SnaBase auf dem Computer des TP ist ein ABEND aufgetreten.
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 beim Verarbeiten des Verbs nicht geladen oder beendet werden. So 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 Unterhaltung wurde aufgrund einer dauerhaften Bedingung beendet, z. B. aufgrund eines Sitzungsprotokollfehlers. Der Systemadministrator sollte das Systemfehlerprotokoll untersuchen, um die Ursache des Fehlers zu ermitteln. Wiederholen Sie die Unterhaltung 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; das TP sowohl grundlegende als auch zugeordnete Unterhaltungsverben ausgestellt hat. In einer einzigen Unterhaltung kann nur ein Typ ausgegeben werden.AP_INVALID_VERB_SEGMENT
Primärer Rückgabecode; die VCB über das Ende des Datensegments hinaus erweitert wurde.AP_PROG_ERROR_PURGING
Primärer Rückgabecode; während der 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. Erhöhen Sie die Stapelgröße Ihrer Anwendung.AP_CONV_BUSY
Primärer Rückgabecode; es kann jeweils nur ein herausragendes Unterhaltungsverb für jede Unterhaltung vorhanden sein. Dies kann auftreten, wenn der lokale TP über mehrere Threads verfügt und mehrere Threads APPC-Aufrufe mit demselben conv_id ausgeben.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 beim Verarbeiten eines APPC-Aufrufs vom lokalen TP einen Fehler an APPC zurückgegeben. Der Rückgabecode des Betriebssystems wird über die secondary_rc zurückgegeben. Es wird in intel byte-getauschter Reihenfolge angezeigt. Wenn das Problem weiterhin besteht, wenden Sie sich an den Systemadministrator.AP_DEALLOC_ABEND_PROG
Primärer Rückgabecode; die Unterhaltung wurde aus einem der folgenden Gründe umgestellt:Der Partner TP hat DEALLOCATE mit dealloc_type auf AP_ABEND_PROG festgelegt.
Der Partner TP hat einen ABEND gefunden, der dazu führt, dass der Partner LU eine DEALLOCATE-Anforderung sendet.
AP_DEALLOC_ABEND_SVC
Primärer Rückgabecode; die Unterhaltung wurde abgeglichen, da der Partner TP DEALLOCATE mit dealloc_type auf AP_ABEND_SVC festgelegt hat.AP_DEALLOC_ABEND_TIMER
Primärer Rückgabecode; die Unterhaltung wurde zugeordnet, da der Partner TP DEALLOCATE mit dealloc_type auf AP_ABEND_TIMER festgelegt hat.AP_SVC_ERROR_PURGING
Primärer Rückgabecode; die Partner-TP (oder Partner-LU), die SEND_ERROR ausgestellt hat, wobei err_type auf AP_SVC festgelegt ist, während sie den Status "RECEIVE", "PENDING_POST", "CONFIRM", "CONFIRM_SEND" oder "CONFIRM_DEALLOCATE" erhalten. Die an den Partner-TP gesendeten Daten wurden möglicherweise gelöscht.
Bemerkungen
Abhängig vom Wert des dealloc_type-Parameters kann die Unterhaltung in einem der in der folgenden Tabelle angegebenen Zustände enthalten sein, wenn der TP DEALLOCATE ausgibt.
| dealloc_type | Zulässiger Zustand |
|---|---|
| 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, zusammengefasst in der folgenden Tabelle, basieren auf dem Wert des primary_rc.
| primary_rc | Neuer Zustand |
|---|---|
| AP_OK | ZURÜCKSETZEN |
| AP_ALLOCATION_ERROR | ZURÜCKSETZEN |
| AP_CONV_FAILURE_RETRY | ZURÜCKSETZEN |
| AP_CONV_FAILURE_NO_RETRY | ZURÜCKSETZEN |
| AP_DEALLOC_ABEND | ZURÜCKSETZEN |
| AP_DEALLOC_ABEND_PROG | ZURÜCKSETZEN |
| AP_DEALLOC_ABEND_SVC | ZURÜCKSETZEN |
| AP_DEALLOC_ABEND_TIMER | ZURÜCKSETZEN |
| AP_PROG_ERROR_PURGING | RECEIVE |
| AP_SVC_ERROR_PURGING | RECEIVE |
Vor der Zuordnung der Unterhaltung führt dieses Verb das Äquivalent eines der folgenden Aktionen 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 impliziertes Vergessen bezeichnet werden. Wenn das Protokoll angibt, dass ein FORGET PS-Header erforderlich ist, bedeutet der nächste Datenfluss in der Sitzung, dass ein FORGET empfangen wurde. In der normalen Situation ist der TP über den nächsten Datenfluss informiert, wenn Daten in einer seiner Synchronisierungspunktunterhaltungen empfangen oder gesendet werden.
Es ist jedoch möglich, dass die letzte Nachricht, die ablaufen soll, durch die Unterhaltung verursacht wird, die zugeordnet wird. In diesem Fall ist der TP nicht bewusst, wenn der nächste Datenfluss in der Sitzung auftritt. Um den TP mit dieser Benachrichtigung bereitzustellen, wird das VERB DEALLOCATE geändert, damit 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 Unterhaltung verwendet wird.
Wenn die Sitzung vor anderen Datenflüssen ungebunden ist.
Wenn die Sitzung aufgrund eines DLC-Ausfalls anormal beendet wird.
Das VERB DEALLOCATE enthält auch ein Korrelatorfeldmemm , das als parameter zurückgegeben wird, wenn die Rückruffunktion aufgerufen wird. Die Anwendung kann diesen Parameter beliebig verwenden (z. B. als Zeiger auf einen Steuerelementblock innerhalb der Anwendung).
Der TP kann den Typparameter verwenden, der an die Rückruffunktion übergeben wird, um zu bestimmen, ob der Nachrichtenfluss angibt, dass ein implizites Vergessen empfangen wurde.
Beachten Sie, dass das VERB DEALLOCATE wahrscheinlich abgeschlossen wird, bevor die Rückrufroutine aufgerufen wird. Die Unterhaltung gilt als zurückgesetzt, und es können keine weiteren Verben mit dem Unterhaltungsbezeichner ausgegeben werden. Wenn die Anwendung ein TP_ENDED Verb vor dem nächsten Datenfluss in der Sitzung ausgibt, wird die Rückrufroutine nicht aufgerufen.
Der Hostintegrationsserver ermöglicht es TPs, Unterhaltungen sofort nach dem Senden von Daten zu behandeln, indem der Typparameter für SEND_DATA als AP_SEND_DATA_DEALLOC_ * angegeben wird. Die SEND_DATA Verben enthalten jedoch nicht die implizite Rückruffunktion zum Vergessen. TPs, die implizit vergessene Benachrichtigung erhalten möchten, müssen DEALLOCATE explizit ausgeben.