Partager via


Using WorkflowCommitWorkBatch Service, exemple

Download sample

Cet exemple montre comment Windows Workflow Foundation permet aux services personnalisés de participer à la même transaction que l'instance de workflow où sont utilisés les services.

Toute activité composite dotée d'un comportement transactionnel est également associée à un lot. Si une activité contenue dans cette activité composite appelle une méthode sur un service fourni par l'hôte, ce service peut également faire partie du lot. Lorsque l'activité composite est terminée, le lot est validé. Si, pour une raison quelconque, un élément ne peut pas être validé, le lot est restauré dans son intégralité. Dans le cadre du processus de validation, le contexte de transaction est fourni à tous les éléments du lot. Par conséquent, le service qui souhaite participer à la transaction obtient également le contexte de transaction. Il peut ensuite transmettre ce contexte de transaction à tous les appels qu'il effectue. Par exemple, il est courant que le contexte de transaction soit transmis à un appel de base de données afin que même les appels de base de données participent à la même transaction.

Participation au lot

Pour participer au lot, le service doit implémenter une interface appelée IPendingWork.

Inscription avec le lot

Pour participer au lot, le service (ou tout type qui doit participer au lot) doit s'inscrire avec le lot. Le scénario suivant explique les étapes requises pour s'inscrire avec le lot.

Pendant l'exécution, une activité appelle une méthode sur le service. Au lieu d'effectuer le travail proprement dit dans la méthode, cette dernière s'inscrit uniquement avec le lot et le contexte requis pour terminer le travail. Par la suite, au moment de la validation du lot, la méthode Commit est appelée avec le contexte utilisé lors de l'inscription. En d'autres termes, la méthode diffère uniquement le traitement jusqu'à ce que le moment soit opportun pour effectuer le travail proprement dit.

Pour s'inscrire avec le lot, l'élément de travail est ajouté au lot actuel à l'aide des éléments suivants :

WorkflowEnvironment.WorkBatch.Add(IPendingWork work, object workItem);

Détails d'exemple

L'exemple est un scénario de transfert d'argent. Une certaine somme d'argent doit être transférée d'un compte d'épargne vers un compte chèques. Le workflow commence par créditer l'argent sur le compte chèques. Il essaie ensuite de débiter la somme du compte d'épargne. Si la somme d'argent sur le compte d'épargne est inférieure au montant à transférer, la transaction est abandonnée et le compte chèques est restauré. Si la somme est supérieure, la transaction aboutit.

Dans le cadre de la méthode de validation, le contexte de transaction est passé aux appels de base de données afin que même la base de données puisse participer à la même transaction.

L'exemple présente trois activités personnalisées.

CreditAmount-- Utilisé pour créditer la somme sur le compte chèques.

DebitAmount-- Utilisé pour débiter la somme du compte d'épargne.

TransactionComposite-- Activité composite qui hérite de l'activité SequenceActivity. Elle fournit le comportement de transaction.

Pour créer et configurer la base de données SQL Server

  1. À l'aide de Microsoft SQL Server 2005 Express, SQL Server 2000 et versions ultérieures ou SQL Server 2000 Desktop Engine (MSDE), créez une base de données nommée SqlPersistenceService avec l'instruction de requête SQL :

    CREATE DATABASE SqlPersistenceService

    Remarque   lors de l'utilisation simultanée de SqlTrackingService et de SqlWorkflowPersistenceService dans une application de workflow, il est recommandé d'utiliser une base de données unique à la fois pour la persistance et le suivi.

  2. Dans l'espace de travail de l'Analyseur de requêtes SQL, sélectionnez la base de données que vous avez créée à l'étape 1 dans la liste des bases de données disponibles.

  3. Dans le menu Fichier, cliquez sur Ouvrir et ouvrez le script SQL %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<langue>\SqlPersistenceService_Schema.sql, où <framework_version> correspond à la version actuelle du .NET Framework installée sur votre ordinateur.

  4. Exécutez la requête en cliquant sur Exécuter ou en appuyant sur la touche F5 pour créer les tables de service de persistance SQL.

  5. Dans le menu Fichier, cliquez sur Ouvrir et ouvrez le script SQL %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<langue>\SqlPersistenceService_Logic.sql, où <framework_version> correspond à la version actuelle du .NET Framework installée sur votre ordinateur.

  6. Exécutez la requête en cliquant sur Exécuter ou en appuyant sur la touche F5 pour créer les procédures stockées de service de persistance SQL.

Pour générer et exécuter l'exemple

  1. Téléchargez l'exemple en cliquant sur Télécharger l'exemple.

    L'exemple de projet est alors extrait sur votre disque dur local.

  2. Créez la base de données TransactionServiceSampleDB en exécutant le script de la base de données fourni dans le fichier .\SQL\TransactionServiceDB.cmd.

    NoteRemarque :

    Ce script crée la base de données nommée TransactionServiceSampleDB. La chaîne de connexion utilisée dans l'exemple utilise ce nom de base de données.

    Note Remarque :

    Veillez à mettre à jour la chaîne de connexion correcte dans le code source si vous modifiez le nom de la base de données. Sinon, l'exemple ne peut pas se connecter à la base de données. De même, avant d'exécuter le script, vérifiez que l'emplacement correct pour l'installation de votre serveur SQL est spécifié à la ligne 20 du script.

  3. Cliquez sur Démarrer, pointez sur Programmes, puis sur Microsoft Windows SDK et cliquez sur Environnement de commande.

  4. Accédez au répertoire source de l'exemple.

  5. À l'invite de commandes, tapez MSBUILD <Nom du fichier solution>.

  6. À l'invite de commandes du Kit de développement SDK, exécutez le fichier .exe dans le dossier Host\bin\debug (ou le dossier Host\bin pour la version VB de l'exemple), situé sous le dossier source de l'exemple.

  7. Pour déboguer l'exemple, faites du projet SampleWorkflow le projet de démarrage en cliquant avec le bouton droit sur le projet dans l'Explorateur de solutions et en sélectionnant Définir comme projet de démarrage.

  8. Ouvrez la boîte de dialogue Propriétés du projet SampleWorkflow.

  9. Sélectionnez Démarrer le programme externeet sélectionnez le fichier host.exe dans le dossier Host\bin\Debug.

    Lorsque vous exécutez le fichier Host.exe, l'exemple attend la saisie du montant à transférer du compte d'épargne vers le compte chèques. Entrez un montant positif non nul. La transaction réussit ou échoue selon le solde affiché par le compte d'épargne. L'affichage correspondant apparaît à l'écran.

Voir aussi

Référence

Commit
Add
WorkflowCommitWorkBatchService

Autres ressources

Windows Workflow CommitWorkBatch Services
Using Transactions in Workflows

Footer image

Copyright ©2007 par Microsoft Corporation. Tous droits réservés.