Compensation (exemple BizTalk Server)
L’exemple Compensation montre comment utiliser la forme Compenser dans une orchestration.
Fonctions de l'exemple
Cet exemple montre comment compenser la transaction déjà validée dans l'orchestration en procédant comme suit :
Entrez les données client dans le formulaire InfoPath et envoyez-les à une orchestration exposée comme service Web.
L'orchestration effectue deux actions parallèles. L'une d'elle renvoie un accusé de réception au formulaire InfoPath, tandis que l'autre met à jour les bases de données Northwind et BTSCompensationSampleMailingList.
Dans la deuxième action, l’orchestration mappe le message entrant à un format de message d’application de gestion de la relation client (CRM), puis met à jour la table Customers dans la base de données Northwind. La table Mailing List dans la base de données BTSCompensationSampleMailingList est ensuite mise à jour.
Si une des actions échoue, les modifications apportées à la base de données Northwind sont compensées via l'appel d'un assembly externe pour réécrire les données client d'origine dans la base de données.
Comment cet exemple est conçu et pourquoi
Une forme Étendue est principalement utilisée pour l’exécution transactionnelle et la gestion des exceptions, y compris la compensation. Une étendue est constituée de deux blocs. Le premier est le bloc de contexte et le second peut être un ou plusieurs blocs de gestion des exceptions ou de compensation (équivalent à l'instruction try-catch dans le langage de programmation .NET). L'orchestration UpdateContact.odx inclut deux actions parallèles. Dans la branche de droite, le bloc try est la forme Étendue nommée Systèmes principaux mis à jour, qui a un type de transaction Long-Running et un identificateur de transaction Upd_Backend. Plus bas dans le flux, un bloc catch intercepte l'exception générale et initie la compensation.
Pour plus d’informations sur la forme Étendue , consultez Étendues. Consultez également Guide pratique pour configurer la forme d’étendue.
Notes
L’orchestration doit elle-même être une transaction de longue durée pour que vous définissiez le type de transaction sur Atomic ou Long-Running.
Dans le bloc d’essai, il existe deux étendues nommées Update CRM et Update Mailing. Toutes deux sont des transactions atomiques. L'étendue Update CRM inclut un bloc try et un bloc compensation. Le bloc try met à jour la base de données Northwind via un appel de méthode auprès d'un assembly externe. Le bloc compensation est l'emplacement dans lequel l'action de compensation intervient. Lorsqu'une exception survient dans l'étendue Update Backend Systems, le code dans la forme Undo CRM Expression met à jour l'enregistrement à son état d'origine. Cela est déclenché par la forme Compenser dans le bloc Exception catch.
Notes
Les transactions atomiques garantissent que les mises à jour partielles sont automatiquement annulées en cas d'échec lors de la mise à jour transactionnelle et que les effets de la transaction sont effacés (à l'exception des effets des appels .NET effectués dans la transaction).
Notes
Une transaction à long terme est considérée comme validée une fois que sa dernière instruction a été exécutée. Il n’y a pas de restauration automatique de l’état en cas d’abandon d’une transaction. Vous pouvez obtenir cette restauration par programme grâce aux gestionnaires d'exception et de compensation illustrés dans cet exemple.
Dans le bloc catch, il existe une forme Delay définie pendant dix secondes. Celle-ci retarde l'action de compensation. Il existe également une forme De compensation qui lance l’action de compensation dans la transaction Upd_Backend.
Les événements suivants se produisent une fois que l'orchestration a reçu le message d'entrée :
L'assembly UpdateCrm met à jour une ligne dans la base de données Northwind.
L'assembly UpdateMailingList met à jour un enregistrement correspondant dans la base de données BTSCompensationSampleMailingList.
En cas d'erreur lors de la mise à jour de la base de données Northwind, une exception est générée et l'orchestration quitte le processus.
En cas d'erreur lors de la mise à jour de la base de données BTSCompensationSampleMailingList, une exception est générée et la réécriture des données client d'origine dans la base de données Northwind intervient après un délai de dix secondes.
Accès à l'exemple
<Chemin d’accès> des exemples\Orchestrations\Compensation\
Le tableau suivant présente les fichiers de cet exemple et décrit leur fonction.
Fichier(s) | Description |
---|---|
Cleanup.bat | Fichier de commandes utilisé pour désinstaller l'exemple. |
CompensationOrchestration.btproj | Projet d'orchestration. |
CompensationSample.sln | Exemple de solution. |
CompensationSampleBinding.xml | Données de liaison pour l'orchestration (utilisées lors de l'installation). |
ContactInfo.xsd | Schéma de message des coordonnées. |
ContactInfo.xsx | Fichier de disposition du concepteur d'orchestration. |
CreateSQLDataStore.sql | Script SQL qui permet de créer et renseigner l'exemple de base de données. |
CrmSchema.xsd | Schéma de message de la mise à jour CRM. |
MailingListSchema.xsd | Schéma de message de la mise à jour de la liste de distribution. |
RemoveVirDir.vbs | Script Microsoft Visual Basic Scripting Edition (VBScript) qui permet de supprimer les répertoires virtuels et physiques du service Web (utilisés lors de la désinstallation). |
Request2Crm.btm | Mappage de message qui permet de convertir la demande (coordonnées) en message de mise à jour CRM. |
Request2MailingList.btm | Mappage de message qui permet de convertir la demande (coordonnées) en message de liste de distribution. |
Setup.bat | Fichier de commandes qui permet d'installer l'exemple. |
UpdateContact.odx | Fichier d'orchestration. |
UpdateRequest2UpdateResponse.btm | Mappage de message qui permet de convertir la demande (coordonnées) en message de réponse. |
UpdateResponse.xsd | Schéma de message de réponse. |
InfoPath\Contact Info Update.xsn | Fichier Microsoft InfoPath utilisé pour envoyer les formulaires au service Web d'orchestration. |
UpdateCrm\AssemblyInfo.cs | Fichier de source d'informations de l'assembly UpdateCrm. (L'assembly UpdateCrm met à jour la base de données Northwind.) |
UpdateCrm\UpdateCrm.cs | Code source principal de l'assembly UpdateCrm. |
UpdateCrm\UpdateCRM.csproj | Fichier de projet UpdateCrm. |
UpdateMailingList\AssemblyInfo.cs | Fichier de source d'informations de l'assembly UpdateMailingList. (L'assembly UpdateMailingList met à jour l'exemple de base de données.) |
UpdateMailingList\UpdateMailingList.cs | Code source principal de l'assembly UpdateMailingList. |
UpdateMailingList\UpdateMailingList.csproj | Fichier de projet UpdateMailingList. |
Génération et initialisation de cet exemple
Pour créer et initialiser l'exemple Compensation
Dans une fenêtre de commande Visual Studio, accédez au dossier suivant :
<Chemin d’accès> des exemples\Orchestrations\Compensation\
Exécutez Setup.bat, qui effectue les actions suivantes :
création et déploiement de l'exemple d'assembly.
Lors du lancement de l'Assistant Publication de services Web BizTalk, procédez manuellement comme suit :
Dans la page Bienvenue dans l’Assistant Publication des services web BizTalk , cliquez sur Suivant.
Dans la page Créer un service web , sélectionnez Publier l’orchestration BizTalk en tant que services web, puis cliquez sur Suivant.
Dans la page Assembly BizTalk , parcourez et sélectionnez <Exemples de chemin d’accès>\Orchestrations\Compensation\bin\Release\CompensationOrchestration.dll, puis cliquez sur Suivant.
Dans la page Orchestrations et ports , cliquez sur Suivant.
Dans la page Propriétés du service web , dans Espace de noms cible du service web, tapez
http://Microsoft.BizTalk.Samples.Compensation/
, puis cliquez sur Suivant.Dans la page Projet de service web , dans Emplacement, tapez
http://localhost/CompensationOrchestrationWebServiceProxy
.Sélectionnez la zone Autoriser l’accès anonyme au service web case activée.
Sélectionnez la zone Créer un emplacement de réception BizTalk dans la case activée d’application suivante.
Dans le menu déroulant Créer un emplacement de réception BizTalk dans le menu déroulant application suivant , sélectionnez Application BizTalk 1 dans la liste déroulante, puis cliquez sur Suivant.
Dans la page Résumé du projet de service web , cliquez sur Créer.
Dans la page Fin de l’Assistant Publication des services web BizTalk , cliquez sur Terminer.
Le programme d'installation crée et lie les ports, crée la base de données principale pour l'exemple et ajoute les assemblys C# au GAC (Global Assembly Cache).
Notes
Avant d'essayer d'exécuter cet exemple, vous devez vous assurer que BizTalk Server n'a signalé aucune erreur lors du processus de création et d'initialisation.
Exécution de cet exemple
Une fois l'exemple créé et initialisé, tenez compte des points suivants avant de l'exécuter :
Si vous exécutez cet exemple sur Windows Server 2008 SP2 ou Windows Server 2008 R2, vous devez créer un pool d’applications IIS et définir son identité sur un compte membre du groupe Windows Utilisateurs d’applications BizTalk. Vous devez également mettre à jour le répertoire virtuel du service Web d'orchestration afin qu'il soit exécuté dans ce pool d'applications.
Ajoutez le compte ASPNET au groupe Utilisateurs d'hôtes BizTalk isolés.
Donnez au groupe Utilisateurs de l’application BizTalk db_owner l’autorisation d’accéder aux bases de données BTSCompensationSampleMailingList et Northwind .
Si BizTalk Server n’est pas installé à l’emplacement par défaut (lecteur :\Program Files\Microsoft BizTalk Server <version>\), vous devez publier le formulaire Contact Info Update.xsn avant de l’utiliser. Pour ce faire, procédez comme suit.
Pour publier le formulaire InfoPath
Dans Internet Explorer, dans le menu Outils, cliquez sur Options Internet.
Sous l’onglet Sécurité , cliquez sur Internet, puis sur Niveau personnalisé.
Dans la section Divers , vérifiez que le paramètre Accéder aux sources de données entre les domaines est activé, puis cliquez sur OK. Ce paramètre est requis pour le code de script de la solution d'interface utilisateur InfoPath à exécuter.
Dans Windows Explorer, accédez à <Samples Path>\Orchestrations\Compensation\InfoPath, cliquez avec le bouton droit sur Contact Info Update.xsn, puis cliquez sur Concevoir.
La solution de mise à jour des coordonnées InfoPath (Contact Info Update) est ouverte en mode Création.
Dans l’application InfoPath Contact Info Update, dans le menu Fichier , cliquez sur Publier.
L'Assistant Publication apparaît.
Sélectionnez Dans un dossier partagé sur cet ordinateur ou sur un réseau et publiez la solution sur le chemin d’accès <Samples Path>\Orchestrations\Compensation\InfoPath\Contact Info Update.xsn.
Fermez InfoPath en mode Création.
Vous êtes prêt à exécuter cet exemple.
Pour exécuter l'exemple Compensation
Double-cliquez sur Contact Info Update.xsn pour l’ouvrir dans InfoPath.
Renseignez le formulaire pour un compte existant dans les deux bases de données. Par exemple, utilisez l'ID de compte « ALFKI » de la table Customers dans la base de données Northwind.
Dans le menu Fichier , sélectionnez Envoyer, puis cliquez sur Envoyer.
Le document de réponse doit apparaître dans le < dossier Samples Path>\Orchestrations\Compensation\Out, et les bases de données Northwind et BTSCompensationSampleMailingList doivent être mises à jour avec les nouvelles données du formulaire InfoPath.
Notes
Vous pouvez détacher la base de données BTSCompensationSampleMailingList ou la mettre hors connexion pour tester l'action de compensation effectuée par l'orchestration. Notez que l'enregistrement est d'abord mis à jour dans la base de données Northwind. Lorsque l'orchestration tente de mettre à jour la base de données BTSCompensationSampleMailingList par la suite, la mise à jour échoue car cette base de données est détachée. Une exception est donc générée et l'exécution de l'action de compensation en vue de la réécriture des données client d'origine dans la base de données Northwind intervient après un délai de dix secondes.
Notes
Vous risquez d'obtenir une erreur « Échec de la connexion pour l'utilisateur 'IIS APPPOOL\DefaultAppPool ». Cela est peut-être dû à un échec de la validation de l'accès au serveur basé sur les jetons. Pour corriger cette erreur, créez un pool d'applications et utilisez le compte d'administrateur dans ce pool.
Désinstallation de l'exemple
Pour désinstaller l'exemple Compensation
Dans une fenêtre de commande Visual Studio, accédez au dossier suivant :
<Chemin d’accès> des exemples\Orchestrations\Compensation\
Exécutez Cleanup.bat.