ICrmLogControl::RegisterCompensator-Methode (comsvcs.h)

Der CRM-Worker verwendet diese Methode, um den CRM-Kompensator bei der CRM-Infrastruktur zu registrieren. Es muss die erste Methode sein, die vom CRM-Worker aufgerufen wird, und sie kann nur einmal erfolgreich aufgerufen werden. Wenn der CRM-Worker beim Aufrufen dieser Methode den Fehlercode "Wiederherstellung in Bearbeitung" empfängt, sollte er diese Methode erneut aufrufen, bis sie erfolgreich ist.

Syntax

HRESULT RegisterCompensator(
  [in] LPCWSTR lpcwstrProgIdCompensator,
  [in] LPCWSTR lpcwstrDescription,
  [in] LONG    lCrmRegFlags
);

Parameter

[in] lpcwstrProgIdCompensator

Die ProgId des CRM-Kompensator. Die CLSID des CRM-Kompensator in Zeichenfolgenform wird ebenfalls akzeptiert.

[in] lpcwstrDescription

Die Beschreibungszeichenfolge, die von den Überwachungsschnittstellen verwendet werden soll.

[in] lCrmRegFlags

Flags aus der CRMREGFLAGS-Enumeration , die steuern, welche Phasen des Transaktionsabschlusses vom CRM-Kompensator empfangen werden sollen und ob die Wiederherstellung fehlschlagen soll, wenn nach dem Versuch der Wiederherstellung Zweifel bestehen.

Rückgabewert

Diese Methode kann die folgenden Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
Die Methode wurde erfolgreich abgeschlossen.
E_POINTER
Ein NULL-Zeiger wurde als Argument bereitgestellt.
E_UNEXPECTED
Ein unerwarteter Fehler ist aufgetreten.
XACT_E_NOTRANSACTION
Die Komponente, die den CRM-Clerk erstellt, verfügt nicht über eine Transaktion.
XACT_E_RECOVERYINPROGRESS
Die Wiederherstellung der CRM-Protokolldatei wird noch ausgeführt.
XACT_E_RECOVERY_FAILED
Fehler bei der Wiederherstellung der CRM-Protokolldatei, da zweifelsfreie Transaktionen verbleiben.
XACT_E_WRONGSTATE
Diese Methode wurde im falschen Zustand aufgerufen. entweder vor RegisterCompensator oder beim Abschluss der Transaktion (CRM Worker).
E_OUTOFMEMORY
Ein Fehler mit nicht genügend Arbeitsspeicher ist aufgetreten.
E_NOINTERFACE
Der CRM-Kompensator unterstützt nicht mindestens eine der erforderlichen Schnittstellen (ICrmCompensator oder ICrmCompensatorVariants).

Hinweise

Mit dem lCrmRegFlags-Parameter kann der Implementierer entscheiden, welche Phasen des Transaktionsabschlusses der CRM-Kompensator erhalten möchte. Einige CRM-Kompensatoren leisten möglicherweise keine Arbeit in der Vorbereitungsphase und müssen daher keine Vorbereitungsbenachrichtigungen erhalten. Es kann die Leistung verbessern, um anzugeben, dass in diesem Fall keine Vorbereitungsphase erforderlich ist.

Es wird empfohlen, CRM-Worker und CRM-Kompensatoren als "Beide"-Threadkomponenten (Threadingmodell = Beliebige Wohnung) zu entwickeln. In einigen Fällen ist dies jedoch möglicherweise aufgrund von Spracheinschränkungen nicht möglich (z. B. bei der Entwicklung von CRMs mit Visual Basic). Crm-Kompensatoren mit Apartmentthreads (Threadingmodell = Single Thread Apartment) werden in der Vorbereitungsphase deadlockt, es sei denn, ihre Synchronisierungseigenschaft wird auf "nicht unterstützt" festgelegt. Eine weitere Alternative für Apartmentthread-CRM-Kompensatoren besteht darin, die Vorbereitungsphase zu überspringen, wenn dies nicht erforderlich ist.

In Szenarien mit mehreren Distributed Transaction Coordinators (DTCs) ist es möglich, dass eine DTC-Transaktion in den Zweifelszustand wechselt. Normalerweise liegt dies daran, dass während einer Transaktion eine Unterbrechung aufgetreten ist und der Absender der Transaktion nicht kontaktiert werden kann, um das Ergebnis der Transaktion zu ermitteln. In diesem Fall kann die CRM-Infrastruktur das Ergebnis der Transaktion nicht ermitteln. Ein CRM-Implementierer kann entscheiden, ob in diesem Fall neue Transaktionen zugelassen werden sollen.

Das Flag "Fail if doubts remain" wird wie folgt verwendet: Wenn das Flag "Fail if in doubts remain" für RegisterCompensator angegeben wird, schlägt der Aufruf von RegisterCompensator mit dem Fehlercode "Recovery Failed" fehl, wenn zweifelsfreie Transaktionen nach der Wiederherstellung verbleiben. Wenn das Flag "Fail if in doubts remain" nicht angegeben wird, ist die Wiederherstellung erfolgreich, neue Transaktionen sind zulässig, und die zweifelsfreien Transaktionen verbleiben in der CRM-Protokolldatei. Die CRM-Infrastruktur versucht, diese zweifelsfreien Transaktionen bei der nächsten Wiederherstellung (wenn der Anwendungsserverprozess neu gestartet wird) wieder aufzulösen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile comsvcs.h

Weitere Informationen

ICrmLogControl