共用方式為


工作流程序列化範例

Download sample

這個範例會示範如何序列化宣告式工作流程,以及如何還原序列化並執行工作流程。宣告式工作流程是使用工作流程物件而非標準程式碼檔案所建立的。

在 Program.cs 中使用 Main 方法,便會以程式設計的方式來建立工作流程執行個體,而且會新增 ConsoleActivity 類型的自訂活動。由於宣告式工作流程無法使用程式碼除外,因此必須使用具有已覆寫之 Execute 方法的自訂活動,而不是使用具有程式碼處理常式的 Code (程式碼) 活動。在此範例中,簡單的自訂活動會接受稱為 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);

另外,在此範例中,由於沒有使用任何自訂類型,因此不需要使用類型 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);

若要建置範例

  1. 按一下 [下載範例] 來下載範例。

    這樣便會將範例專案擷取到本機硬碟上。

  2. 按一下 [開始],並依序指向 [程式集] 和 [Microsoft Windows SDK],再按一下 [CMD 殼層]。

  3. 移至範例的來源目錄。

  4. 在命令提示字元上,輸入 MSBUILD <Solution file name>

執行範例

  • 在 [SDK 命令提示字元] 視窗中,執行 HostApplication\bin\debug 資料夾 (若是範例的 VB 版本,則是 HostApplication\bin 資料夾) 中的 .exe 檔案,該資料夾位於此範例的主要資料夾下方。

請參閱

參考

WorkflowMarkupSerializer

其他資源

Serializing Custom Activities
Serialization Overview
Workflow Markup Overview
標記範例

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.