工作流程序列化範例
這個範例會示範如何序列化宣告式工作流程,以及如何還原序列化並執行工作流程。宣告式工作流程是使用工作流程物件而非標準程式碼檔案所建立的。
在 Program.cs 中使用 Main 方法,便會以程式設計的方式來建立工作流程執行個體,而且會新增 ConsoleActivity 類型的自訂活動。由於宣告式工作流程無法使用程式碼除外,因此必須使用具有已覆寫之 Execute 方法的自訂活動,而不是使用具有程式碼處理常式的 Code (程式碼) 活動。在此範例中,簡單的自訂活動會接受稱為 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);
另外,在此範例中,由於沒有使用任何自訂類型,因此不需要使用類型 Provider 來還原序列化工作流程。當必須使用類型 Provider 時,可使用下列程式碼片段來新增該類型 Provider:
// 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 殼層]。
移至範例的來源目錄。
在命令提示字元上,輸入 MSBUILD <Solution file name>。
執行範例
- 在 [SDK 命令提示字元] 視窗中,執行 HostApplication\bin\debug 資料夾 (若是範例的 VB 版本,則是 HostApplication\bin 資料夾) 中的 .exe 檔案,該資料夾位於此範例的主要資料夾下方。
請參閱
參考
其他資源
Serializing Custom Activities
Serialization Overview
Workflow Markup Overview
標記範例
Copyright © 2007 by Microsoft Corporation. All rights reserved.