HOW TO:序列化工作流程
Windows Workflow Foundation 架構提供用於序列化和還原序列化工作流程的序列化基礎結構。 根據預設,依特定格式規則將工作流程序列化為工作流程標記。
預設序列化
新活動的開發人員自動取得預設序列化至工作流程標記。 這個預設序列化應足以供大部分活動使用,但有時可能需要自訂的序列化程式。
下列是如何使用 WorkflowMarkupSerializer 類別來序列化工作流程的範例。
using System.Xml;
using System.IO;
using System.Workflow.ComponentModel.Serialization;
using System.Globalization;
...
// In the implementation of your host application, create a sequential
// workflow.
SequentialWorkflowActivity workflow1 = new SequentialWorkflowActivity();
// Construct workflow.
...
// Serialize workflow.
WorkflowMarkupSerializer serializer = new WorkflowMarkupSerializer();
StringWriter strWriter = new StringWriter(CultureInfo.InvariantCulture);
XmlWriter xmlWriter = XmlWriter.Create(strWriter);
serializer.Serialize(xmlWriter, workflow1);
// Create a log file, open it, and write the serialized workflow to it.
File.WriteAllText(@"C:\logfile.txt", strWriter.ToString());
Imports System.Xml
Imports System.IO
Imports System.Workflow.ComponentModel.Serialization
Imports System.Globalization
...
' In the implementation of your host application, create a sequential
' workflow.
Dim workflow1 as New SequentialWorkflowActivity()
' Construct workflow.
...
' Serialize workflow.
Dim serializer as new WorkflowMarkupSerializer()
Dim strWriter as new StringWriter(CultureInfo.InvariantCulture)
Dim xmlWriter as XmlWriter = XmlWriter.Create(strWriter)
serializer.Serialize(xmlWriter, workflow1)
' Create a log file, open it, and write the serialized workflow to it.
File.WriteAllText("C:\logfile.txt", strWriter.ToString())
序列化基礎結構。
Windows Workflow Foundation 預設序列化基礎結構會提供序列化預設活動所需的所有型別。 如需 Windows Workflow Foundation 架構預設活動集的詳細資訊,請參閱 Windows Workflow Foundation 活動。
下列是序列化基礎結構中的重要類別。
WorkflowMarkupSerializer 類別是序列化基礎結構中使用的基底序列化型別。 此型別為實作序列化規則的序列化提供其中一些基礎服務。 用於活動的序列化程式和用於自訂活動的任何其他自訂序列化程式必須繼承自這個類別。
ActivityMarkupSerializer 類別繼承自 WorkflowMarkupSerializer 類別。 這個類別用於序列化所有基本活動。 這些活動不是複合活動。
CompositeActivityMarkupSerializer 類別繼承自 ActivityMarkupSerializer 類別,並且提供用於複合活動的序列化。 CompositeActivityMarkupSerializer 新增更多方法來處理可以它們自己的序列化提供者進行序列化的子活動。
序列化格式規則
工作流程標記是物件階層的序列化形式。 如何序列化物件視物件的屬性而定。 有兩個主要規則有助於執行個體的序列化型別:
物件的型別定義是 XAML 中的項目名稱。
物件的屬性對應 XAML 中的項目定義上的屬性。
下列程式碼範例說明物件序列化。
public Class ExampleActivity : Activity
private string property1 = "SomeValue";
private string property2 = "SomeOtherValue";
public string ExampleProperty
{
get
{
return property1;
}
set
{
property1 = value;
}
}
public string ExampleOtherProperty
{
get
{
return property2;
}
set
{
property2 = value;
}
}
// Activity.Execute and other overridden methods not included for clarity.
}
public class ExampleActivity
Inherits Activity
Private property1 As String = "SomeValue"
Private property2 As String = "SomeOtherValue"
Public Property ExampleProperty As String
Get
return property1
End Get
Set (ByVal value As String)
property1 = value
End Set
End Property
Public Property ExampleOtherProperty As String
Get
return property2
End Get
Set (ByVal value As String)
property2 = value
End Set
End Property
' Activity.Execute and other overridden methods not included for
' clarity.
End Class
序列化這個類別的執行個體,如下列 XAML 程式碼範例所示。
<ns0:ExampleActivity ExampleOtherProperty="SomeOtherValue" x:Name="ExampleActivity" ExampleProperty="SomeValue" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" xmlns:ns0="clr-namespace:CustomWFActivities;Assembly=CustomWFActivities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
此程式碼範例說明兩個字串屬性 (Property) ExampleProperty 和 ExampleOtherProperty 變成 ExampleActivity 項目的屬性 (Attribute)。 "SomeValue" 和 "SomeOtherValue" 是用於兩個欄位的實際值。
類別定義當然可能遠比程式碼範例的 ExampleActivity 類別複雜。 其他規則套用在更多複雜物件的序列化中。
注意
WorkflowMarkupSerializer 不支援序列化巢狀型別。 例如,如果您建立自訂活動並在該活動內定義巢狀型別,您將會在編譯期間接收到錯誤。
自訂序列化
您可以自訂序列化格式。 自訂可以分兩個層級完成。 可提供全新的序列化基礎結構,其中包括自訂序列化格式和每個型別的序列化。 在活動層級可以完成其他序列化。 序列化基礎結構仍然是 Windows Workflow Foundation 撰寫架構提供的工作流程標記,但可以變更個別的活動配置。
自訂活動
如果您建立自訂序列化程式,活動撰寫者必須提供參考給自訂序列化程式,如下列程式碼範例所示。
[DesignerSerializer(typeof(ExampleActivityMarkupSerializer), typeof(WorkflowMarkupSerializer))]
public class ExampleActivity : Activity
{
}
<DesignerSerializer(GetType(ExampleActivityMarkupSerializer), GetType(WorkflowMarkupSerializer))> _
Public Class ExampleActivity
Inherits Activity
End Class
使用有兩個參數的 DesignerSerializer 屬性來指定序列化程式:
第一個參數指定序列化程式,該序列化程式應該使用於序列化定義屬性所在之類別上的執行個體。
第二個參數指定序列化程式的基底型別。 序列化程式的基底型別指定要使的序列化配置。
在 DesignerSerializer 程式碼範例中,第二個屬性指定 WorkflowMarkupSerializer。 這表示要使用的基底序列化基礎結構是以 WorkflowMarkupSerializer 為基礎。
定義自訂序列化程式
自訂序列化程式必須是繼承自基底序列化型別的類別。 在 DesignerSerializer 程式碼範例中,ExampleActivityMarkupSerializer 是 ExampleActivity 類別的自訂序列化程式。 ExampleActivityMarkupSerializer 繼承自屬性之第二個參數的 WorkflowMarkupSerializer。
當序列化管理員開始序列化活動時,它會藉由尋找在 DesignerSerializer 屬性的第二個參數中之 WorkflowMarkupSerializer 的基底類別,來使用類別定義判斷自訂序列化程式的型別。 然後取得序列化程式的執行個體並使用它。
工作流程標記
工作流程標記描述可由 Windows Workflow Foundation 執行階段引擎執行的工作流程。 工作流程標記是一種元件序列化配置,用於描述組成工作流程的活動階層,而且在活動引發事件時啟動關聯的邏輯。
工作流程標記沒有任何固定的文法可描述它。 它定義用於表示物件與物件的屬性和方法的一般配置。 每個活動都有序列化邏輯,可使用定義用於物件的標記來表示活動中繼資料。
如需詳細資訊,請參閱使用工作流程標記。
請參閱
參考
System.Workflow.ComponentModel.Serialization
概念
序列化自訂活動
HOW TO:編譯工作流程
使用工作流程標記
其他資源
Copyright © 2007 by Microsoft Corporation. All rights reserved.