Ejemplo de serialización de flujos de trabajo

Download sample

En este ejemplo se muestra cómo serializar un flujo de trabajo declarativo, y cómo deserializarlo y ejecutarlo. Un flujo de trabajo declarativo se crea utilizando el modelo de objetos de flujo de trabajo en lugar de hacerlo en un archivo de código estándar.

En el método Main de Program.cs, se crea una instancia de flujo de trabajo mediante programación y se agrega una actividad personalizada de tipo ConsoleActivity. Dado que no hay ningún código lateral disponible para los flujos de trabajo declarativos, se deben usar actividades personalizadas con métodos Execute invalidados en lugar de las actividades Code con rutinas de controlador de código. En el ejemplo, la actividad personalizada simple que se utiliza toma una propiedad de cadena llamada StringToWrite, y escribe dicha cadena en la consola cuando se ejecuta.

A continuación, el flujo de trabajo se serializa a un archivo de marcado (XAML) utilizando WorkflowMarkupSerializer. La actividad personalizada sólo tiene una propiedad de tipo String. Por consiguiente, no se necesita un serializador personalizado para este flujo de trabajo. Para obtener información sobre cómo serializar actividades que tienen tipos de propiedad complejos, vea Ejemplo de serialización personalizada.

Después, se crea una nueva instancia de flujo de trabajo mediante la deserialización del archivo de marcado. No se necesita ningún deserializador; en lugar de ello, se usa una invalidación de la función CreateWorkflow. Esta invalidación toma un objeto XmlReader que señala un archivo de marcado.

De manera predeterminada, el método CreateWorkflow también realizará la validación del flujo de trabajo, y se iniciará una WorkflowValidationFailedException si se encuentran errores.

Por último, se inicia el flujo de trabajo, y la propiedad deStringToWrite de ConsoleActivity se escribe en la consola.

De manera predeterminada, CreateWorkflow realiza la validación de todas las instancias de flujo de trabajo creadas. Si una aplicación decide optimizar este comportamiento, y administrar la validación por sí misma, la validación predeterminada se puede deshabilitar mediante la propiedad WorkflowRuntimeSection.ValidateOnCreate. Se puede usar el código siguiente para validar el flujo de trabajo.

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

También en el caso del ejemplo, puesto que no se utiliza ningún tipo personalizado, no se necesita un proveedor de tipos para deserializar el flujo de trabajo. Si se necesita un proveedor de tipos, se puede agregar utilizando el fragmento de código siguiente:

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

Para generar el ejemplo

  1. Para descargar el ejemplo, haga clic en Descargar ejemplo.

    Así se extrae el proyecto de ejemplo en su disco duro local.

  2. Haga clic en Inicio, señale Programas, señale Microsoft Windows SDK y, a continuación, haga clic en CMD Shell.

  3. Vaya al directorio de origen del ejemplo.

  4. En el símbolo del sistema, escriba MSBUILD <nombre del archivo de solución>.

Para ejecutar el ejemplo

  • En la ventana del símbolo del sistema del SDK, ejecute el archivo .exe de la carpeta HostApplication\bin\debug (o la carpeta HostApplication\bin para la versión de VB del ejemplo), que se encuentra bajo la carpeta principal del ejemplo.

Consulte también

Referencia

WorkflowMarkupSerializer

Otros recursos

Serializing Custom Activities
Serialization Overview
Workflow Markup Overview
Ejemplos de marcado

Footer image

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.