“工作流序列化”示例
此示例演示如何序列化声明性工作流,以及如何反序列化和执行工作流。 声明性工作流是通过使用工作流对象模型创建的,而不是在标准代码文件中创建的。
在 Program.cs 中的 Main 方法内,以编程方式创建了一个工作流实例,并且添加了一个 ConsoleActivity 类型的自定义活动。 由于声明性工作流没有可用的代码旁置,因此必须使用包含重写 Execute 方法的自定义活动,而不是使用包含代码处理程序例程的代码活动。 在示例中,所使用的简单自定义活动接收一个名为 StringToWrite 的字符串属性,并在执行时将该字符串写出到控制台。
接着,使用 WorkflowMarkupSerializer 将工作流序列化为一个标记 (XAML) 文件。 自定义活动仅具有 String 类型的属性。 因此,此工作流不需要自定义序列化程序。 有关如何序列化包含复杂属性类型的活动的信息,请参见“自定义序列化”示例。
接着,将通过反序列化标记文件创建一个新的工作流实例。 不需要反序列化程序;而是使用 CreateWorkflow 函数的重写。 此重写接收一个指向标记文件的 XmlReader 对象。
默认情况下,CreateWorkflow 方法还将执行工作流验证,并将在发现错误时引发 WorkflowValidationFailedException。
最后,将启动工作流,并将 ConsoleActivity 的 StringToWrite 属性写入控制台。
默认情况下,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);
生成示例
通过单击**“下载示例”**来下载该示例。
这会将示例项目提取到本地硬盘。
单击**“开始”,依次指向“程序”和“Microsoft Windows SDK”,然后单击“CMD 外壳”[CMD Shell]**。
转到示例的源目录。
在命令提示符处键入 MSBUILD <解决方案文件名>。
运行示例
- 在 SDK 命令提示窗口中,运行 HostApplication\bin\debug 文件夹(对于该示例的 VB 版本为 HostApplication\bin 文件夹)中的 .exe 文件,该文件夹位于该示例的主文件夹下。
请参见
参考
其他资源
Serializing Custom Activities
Serialization Overview
Workflow Markup Overview
“标记”示例
版权所有 (C) 2007 Microsoft Corporation。保留所有权利。