Partager via


Workflow Serialization, exemple

Download sample

Cet exemple montre comment sérialiser un workflow déclaratif et désérialiser et exécuter le workflow. Un workflow déclaratif est créé en utilisant le modèle objet de workflow au lieu d'un fichier de code standard.

Dans la méthode Main de Program.cs, une instance de workflow est créée par programme et une activité personnalisée de type ConsoleActivity est ajoutée. Comme aucun code-beside n'est disponible pour les workflows déclaratifs, les activités personnalisées avec des méthodes Execute substituées doivent être utilisées à la place d'activités de code avec des routines de gestionnaire de code. Dans l'exemple, l'activité personnalisée simple utilisée accepte une propriété de type chaîne appelée StringToWrite et écrit cette chaîne dans la console lors de son exécution.

Ensuite, le workflow est sérialisé dans un fichier de balisage (XAML) à l'aide de WorkflowMarkupSerializer. Seule l'activité personnalisée comporte une propriété de type String. Par conséquent, vous n'avez pas besoin d'un sérialiseur personnalisé pour ce workflow. Pour plus d'informations sur la sérialisation d'activités qui comportent des types de propriété complexes, consultez Custom Serialization, exemple.

Ensuite, une nouvelle instance de workflow est créée en désérialisant le fichier de balisage. Aucun désérialiseur n'est exigé ; en revanche, une substitution de la fonction CreateWorkflow est utilisée. Cette substitution accepte un objet XmlReader qui pointe vers un fichier de balisage.

Par défaut, la méthode CreateWorkflow exécute également la validation du workflow, et une exception WorkflowValidationFailedException est levée si des erreurs sont rencontrées.

Enfin, le workflow démarre et la propriété StringToWrite de ConsoleActivity est écrite dans la console.

Par défaut, CreateWorkflow effectue une validation de chaque instance de workflow créée. Si une application décide d'optimiser ce comportement et gère la validation par elle-même, la validation par défaut peut être désactivée à l'aide de la propriété WorkflowRuntimeSection.ValidateOnCreate. Le code suivant peut être utilisé pour valider le workflow à la place.

// Get the type of the workflow and extract the validator attribute from it
Type workflowType = workflow.GetType();
ActivityValidatorAttribute validatorAttribute = (ActivityValidatorAttribute)workflowType.GetCustomAttributes(typeof(ActivityValidatorAttribute), true)[0];

// Load the validator type and create an instance of the validator
Type validatorType = Type.GetType(validatorAttribute.ValidatorTypeName);
Validator validator = (Validator)Activator.CreateInstance(validatorType);

// Create validation manager and validate the workflow
ValidationManager manager = new ValidationManager(workflowRuntime, true);
ValidationErrorCollection validationErrors = validator.Validate(manager, workflow);

Dans l'exemple, comme aucun type personnalisé n'est utilisé, un fournisseur de types n'est pas exigé pour désérialiser le workflow. Si un fournisseur de types devient nécessaire, il peut être ajouté à l'aide de l'extrait de code suivant :

// Push a type provider to resolve a referenced assembly
// The type provider is not necessary in this case, 
// since the referenced assembly is already loaded in the appdomain
// but it is shown for general purpose applications. 
TypeProvider typeProvider = new TypeProvider(null);
typeProvider.AddAssembly(typeof(ConsoleActivity).Assembly);
workflowRuntime.AddService(typeProvider);

Pour générer 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. Cliquez sur Démarrer, pointez sur Programmes, puis sur Microsoft Windows SDK et cliquez sur Environnement de commande.

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

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

Pour exécuter l'exemple

  • Dans la fenêtre Invite de commandes du Kit de développement SDK, exécutez le fichier .exe dans le dossier HostApplication\bin\debug (ou le dossier HostApplication\bin pour la version VB de l'exemple), situé sous le dossier principal de l'exemple.

Voir aussi

Référence

WorkflowMarkupSerializer

Autres ressources

Serializing Custom Activities
Serialization Overview
Workflow Markup Overview
Exemples de balisage

Footer image

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