Share via


Esempio di serializzazione del flusso di lavoro

Download sample

In questo esempio viene illustrato come serializzare un flusso di lavoro dichiarativo, come deserializzarlo ed eseguirlo. Viene creato un flusso di lavoro dichiarativo utilizzando il modello a oggetti del flusso di lavoro anziché un file di codice standard.

Nel metodo Main in Program.cs, viene creata un'istanza del flusso di lavoro a livello di codice e viene aggiunta un'attività personalizzata di tipo ConsoleActivity. Dal momento che non è disponibile alcun code-beside per i flussi di lavoro dichiarativi, è necessario utilizzare le attività personalizzate con metodi Execute ignorati invece delle attività Codice con le routine del gestore di codice. Nell'esempio, la semplice attività personalizzata utilizzata preleva una proprietà della stringa chiamata StringToWrite e scrive tale stringa nella console durante l'esecuzione.

Successivamente, il flusso di lavoro viene serializzato in un file di markup (XAML) utilizzando WorkflowMarkupSerializer. L'attività personalizzata dispone solo di una proprietà di tipo String. Pertanto, non è necessario un serializzatore personalizzato per questo flusso di lavoro. Per informazioni su come serializzare le attività con tipi di proprietà complessi, vedere Esempio di serializzazione personalizzata.

Successivamente, viene creata una nuova istanza del flusso di lavoro tramite deserializzazione del file di markup. Non è necessario alcun deserializzatore; al suo posto viene utilizzato un ovveride della funzione CreateWorkflow. Questo override preleva un oggetto XmlReader che punta a un file di markup.

Per impostazione predefinita, il metodo CreateWorkflow eseguirà anche la convalida del flusso di lavoro e verrà generata una WorkflowValidationFailedException nel caso vengano rilevati errori.

Infine, il flusso di lavoro viene avviato e la proprietà StringToWrite di ConsoleActivity viene scritta nella console.

Per impostazione predefinita, CreateWorkflow esegue la convalida di ogni istanza del flusso di lavoro creata. Se un'applicazione decide di ottimizzare questo comportamento e di gestire autonomamente la convalida, la convalida predefinita può essere disattivata utilizzando la proprietà WorkflowRuntimeSection.ValidateOnCreate. Al suo posto è possibile utilizzare il codice riportato di seguito per la convalida del flusso di lavoro.

// 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);

Nel caso dell'esempio, inoltre, dal momento che non vengono utilizzati tipi personalizzati, non è necessario un provider di tipi per deserializzare il flusso di lavoro. Se dovesse risultare necessario un provider di tipi, è possibile aggiungerlo utilizzando il seguente frammento di codice:

// 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);

Per generare l'esempio

  1. Scaricare l'esempio facendo clic su Scarica esempio.

    In tal modo viene estratto il progetto di esempio sul disco rigido locale.

  2. Fare clic sul pulsante Start, scegliere Programmi, Microsoft Windows SDK e fare clic su CMD Shell.

  3. Accedere alla directory di origine dell'esempio.

  4. Al prompt dei comandi, immettere MSBUILD <nome file soluzione>.

Per eseguire l'esempio

  • Nella finestra del prompt dei comandi di SDK, eseguire il file exe nella cartella HostApplication\bin\debug (o nella cartella HostApplication\bin per la versione VB dell'esempio), collocata sotto la cartella principale dell'esempio.

Vedere anche

Riferimenti

WorkflowMarkupSerializer

Altre risorse

Serializing Custom Activities
Serialization Overview
Workflow Markup Overview
Esempi di markup

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.