Méthode ICrmLogControl ::RegisterCompensator (comsvcs.h)
Le worker CRM utilise cette méthode pour inscrire l’compensateur CRM auprès de l’infrastructure CRM. Il doit s’agir de la première méthode appelée par le worker CRM, et elle ne peut être appelée avec succès qu’une seule fois. Si le worker CRM reçoit un code d’erreur « récupération en cours » lors de l’appel de cette méthode, il doit appeler cette méthode à nouveau jusqu’à ce qu’elle ait réussi.
Syntaxe
HRESULT RegisterCompensator(
[in] LPCWSTR lpcwstrProgIdCompensator,
[in] LPCWSTR lpcwstrDescription,
[in] LONG lCrmRegFlags
);
Paramètres
[in] lpcwstrProgIdCompensator
ProgId du compensateur CRM. Le CLSID du compensateur CRM sous forme de chaîne est également accepté.
[in] lpcwstrDescription
Chaîne de description à utiliser par les interfaces de supervision.
[in] lCrmRegFlags
Indique à partir de l’énumération CRMREGFLAGS que contrôlent les phases d’achèvement de transaction qui doivent être reçues par le compensateur CRM et si la récupération doit échouer si des transactions douteuses subsistent après la tentative de récupération.
Valeur retournée
Cette méthode peut retourner les valeurs suivantes.
Code de retour | Description |
---|---|
|
La commande s'est correctement terminée. |
|
Un pointeur NULL a été fourni en tant qu’argument. |
|
Une erreur inattendue s’est produite. |
|
Le composant qui crée le commis CRM n’a pas de transaction. |
|
La récupération du fichier journal CRM est toujours en cours. |
|
La récupération du fichier journal CRM a échoué en raison de transactions douteuses. |
|
Cette méthode a été appelée dans un état incorrect ; avant RegisterCompensator ou lorsque la transaction est terminée (CRM Worker). |
|
Une erreur de mémoire insuffisante s’est produite. |
|
Le compensateur CRM ne prend pas en charge au moins une des interfaces requises (ICrmCompensator ou ICrmCompensatorVariants). |
Remarques
Le paramètre lCrmRegFlags permet à l’implémenteur de décider quelles phases d’achèvement de transaction le compensateur CRM souhaite recevoir. Certains compensateurs CRM peuvent n’effectuer aucun travail pendant la phase de préparation et n’ont donc pas besoin de recevoir de notifications de préparation ; il peut améliorer les performances pour spécifier qu’aucune phase de préparation n’est requise dans ce cas.
Il est recommandé de développer les workers CRM et les compensateurs CRM en tant que composants threadés « Both » (Threading Model = Any Apartment). Toutefois, dans certains cas, cela peut ne pas être possible en raison de contraintes de langage (par exemple, lors du développement de crms avec Visual Basic). Les compensateurs CRM avec threads d’appartement (Threading Model = Single Thread Apartment) sont bloqués dans la phase de préparation, sauf si leur propriété de synchronisation est définie sur « non pris en charge ». Une autre alternative pour les compensateurs CRM avec thread d’appartement consiste à ignorer la phase de préparation si ce n’est pas nécessaire.
Dans les scénarios avec plusieurs coordinateurs de transactions distribuées (DTC), il est possible qu’une transaction DTC passe à l’état doute. Normalement, cela est dû au fait qu’une interruption s’est produite pendant une transaction et que l’auteur de la transaction ne peut pas être contacté pour connaître le résultat de la transaction. Dans ce cas, l’infrastructure CRM ne peut pas déterminer le résultat de la transaction. Un implémenteur CRM peut décider si de nouvelles transactions doivent être autorisées dans ce cas.
L’indicateur « échec si les doutes restent » est utilisé comme suit : en spécifiant l’indicateur « échec si les doutes demeurent » sur RegisterCompensator, si les transactions douteuses restent après la récupération, l’appel à RegisterCompensator échoue avec un code d’erreur « échec de la récupération ». Si l’indicateur « échec si des doutes subsistent » n’est pas spécifié, la récupération réussit, de nouvelles transactions sont autorisées et les transactions douteuses restent dans le fichier journal CRM. L’infrastructure CRM tente de résoudre à nouveau ces transactions douteuses lors de la prochaine récupération (lorsque le processus du serveur d’applications est redémarré).
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 2000 Professionnel [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows 2000 Server [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | comsvcs.h |