“工作流序列化”示例

Download sample

此示例演示如何序列化声明性工作流,以及如何反序列化和执行工作流。 声明性工作流是通过使用工作流对象模型创建的,而不是在标准代码文件中创建的。

在 Program.cs 中的 Main 方法内,以编程方式创建了一个工作流实例,并且添加了一个 ConsoleActivity 类型的自定义活动。 由于声明性工作流没有可用的代码旁置,因此必须使用包含重写 Execute 方法的自定义活动,而不是使用包含代码处理程序例程的代码活动。 在示例中,所使用的简单自定义活动接收一个名为 StringToWrite 的字符串属性,并在执行时将该字符串写出到控制台。

接着,使用 WorkflowMarkupSerializer 将工作流序列化为一个标记 (XAML) 文件。 自定义活动仅具有 String 类型的属性。 因此,此工作流不需要自定义序列化程序。 有关如何序列化包含复杂属性类型的活动的信息,请参见“自定义序列化”示例

接着,将通过反序列化标记文件创建一个新的工作流实例。 不需要反序列化程序;而是使用 CreateWorkflow 函数的重写。 此重写接收一个指向标记文件的 XmlReader 对象。

默认情况下,CreateWorkflow 方法还将执行工作流验证,并将在发现错误时引发 WorkflowValidationFailedException

最后,将启动工作流,并将 ConsoleActivityStringToWrite 属性写入控制台。

默认情况下,CreateWorkflow 对创建的每个工作流实例执行验证。 如果应用程序决定优化此行为并自己管理验证,则可以使用 WorkflowRuntimeSection.ValidateOnCreate 属性禁用默认验证。 可以改用下面的代码来验证工作流。

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

同样,在此示例中的情况下,由于未使用自定义类型,因此不需要使用类型提供程序来反序列化工作流。 如果必须使用类型提供程序,可以使用下面的代码段来添加它:

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

生成示例

  1. 通过单击**“下载示例”**来下载该示例。

    这会将示例项目提取到本地硬盘。

  2. 单击**“开始”,依次指向“程序”“Microsoft Windows SDK”,然后单击“CMD 外壳”[CMD Shell]**。

  3. 转到示例的源目录。

  4. 在命令提示符处键入 MSBUILD <解决方案文件名>

运行示例

  • 在 SDK 命令提示窗口中,运行 HostApplication\bin\debug 文件夹(对于该示例的 VB 版本为 HostApplication\bin 文件夹)中的 .exe 文件,该文件夹位于该示例的主文件夹下。

请参见

参考

WorkflowMarkupSerializer

其他资源

Serializing Custom Activities
Serialization Overview
Workflow Markup Overview
“标记”示例

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。