다음을 통해 공유


방법: 워크플로 Serialize

Windows Workflow Foundation 프레임워크에서는 워크플로를 serialize하고 deserialize하는 데 사용되는 serialization 인프라를 제공합니다. 기본적으로 워크플로는 특정 서식 설정 규칙에 따라 워크플로 마크업으로 serialize됩니다.

기본 Serialization

새 활동의 개발자는 자동으로 기본 serialization을 워크플로 마크업으로 가져옵니다. 이 기본 serialization은 대부분의 활동에 충분하지만 사용자 지정 serializer를 만들어야 하는 경우도 있습니다.

다음은 WorkflowMarkupSerializer 클래스를 사용하여 워크플로를 serialize하는 방법의 예입니다.

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())

Serialization 인프라

Windows Workflow Foundation 기본 serialization 인프라에서는 기본 활동을 serialize하는 데 필요한 모든 형식을 제공합니다. Windows Workflow Foundation 프레임워크 기본 활동 집합에 대한 자세한 내용은 Windows Workflow Foundation 활동을 참조하십시오.

다음은 serialization 인프라의 중요 클래스입니다.

  • WorkflowMarkupSerializer 클래스는 serialization 인프라에서 사용되는 기본 serialization 형식입니다. 이 형식은 serialization 규칙을 구현하는 serialization에 대한 일부 기본 서비스를 제공합니다. 활동에 대한 serializer와 사용자 지정 활동에 대한 다른 모든 사용자 지정 serializer는 이 클래스에서 상속해야 합니다.

  • ActivityMarkupSerializer 클래스는 WorkflowMarkupSerializer 클래스에서 상속합니다. 이 형식은 모든 기본 활동을 serialize하는 데 사용됩니다. 이러한 활동은 복합 활동이 아닙니다.

  • CompositeActivityMarkupSerializer 클래스는 ActivityMarkupSerializer 클래스에서 상속하고 복합 활동에 대한 serialization을 제공합니다. CompositeActivityMarkupSerializer는 고유 serialization 공급자를 사용하여 serialized될 수 있는 자식 활동을 처리하기 위해 메서드를 더 추가합니다.

Serialization 형식 규칙

Workflow 마크업은 개체 계층 구조가 serialize된 형태입니다. 개체가 serialize되는 방법은 개체의 속성에 따라 달라집니다. 형식 인스턴스의 serialization에 도움이 되는 두 가지 주요 규칙이 있습니다.

  • 개체의 형식 정의는 XAML의 요소 이름입니다.

  • 개체의 속성은 XAML의 요소 정의에 대한 특성에 매핑됩니다.

다음 코드 예제에서는 개체 serialization을 보여 줍니다.

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 코드 예제와 같이 serialize됩니다.

<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" />

이 코드 예제에서는 두 문자열 속성 ExampleProperty 및 ExampleOtherProperty가 ExampleActivity 요소의 특성이 됨을 보여 줍니다. "SomeValue" 및 "SomeOtherValue" 값은 두 필드의 실제 값입니다.

물론 클래스 정의가 코드 예제의 ExampleActivity 클래스보다 훨씬 더 복잡할 수 있습니다. 다른 규칙은 더 복잡한 개체의 serialization에서 적용됩니다.

참고

WorkflowMarkupSerializer는 중첩 형식의 serialization을 지원하지 않습니다. 예를 들어, 사용자 지정 활동을 만들고 해당 활동 안에 중첩 활동을 정의하는 경우 컴파일할 때 오류가 발생합니다.

사용자 지정 Serialization

serialization 형식을 사용자 지정할 수 있습니다. 사용자 지정은 두 가지 수준에서 수행될 수 있습니다. 사용자 지정 serialization 형식과 각 형식에 대한 serialization이 포함된 전체적인 새로운 serialization 인프라를 제공할 수 있습니다. 다른 serialization은 활동 수준에서 수행될 수 있습니다. serialization 인프라는 Windows Workflow Foundation 제작 프레임워크에서 제공되는 워크플로 마크업이지만 개별 활동 레이아웃이 변경될 수 있습니다.

활동 사용자 지정

사용자 지정 serializer를 만드는 경우 활동 작성자가 다음 코드 예제와 같이 사용자 지정 serializer에 대한 참조를 제공해야 합니다.

[DesignerSerializer(typeof(ExampleActivityMarkupSerializer), typeof(WorkflowMarkupSerializer))]
public class ExampleActivity : Activity
{
}
<DesignerSerializer(GetType(ExampleActivityMarkupSerializer), GetType(WorkflowMarkupSerializer))> _
Public Class ExampleActivity 
    Inherits Activity

End Class

serializer는 두 매개 변수가 있는 DesignerSerializer 특성을 사용하여 지정됩니다.

  • 첫 번째 매개 변수는 특성이 정의된 클래스의 인스턴스를 serialize하는 데 사용되어야 하는 serializer를 지정합니다.

  • 두 번째 매개 변수는 serializer의 기본 형식을 지정합니다. serializer의 기본 형식은 사용할 serialization 체계를 지정합니다.

DesignerSerializer 코드 예제에서 두 번째 특성은 WorkflowMarkupSerializer를 지정합니다. 즉, 사용할 기본 serialization 인프라는 WorkflowMarkupSerializer를 기반으로 합니다.

사용자 지정 Serializer 정의

사용자 지정 serializer는 기본 serialization 형식에서 상속해야 하는 클래스입니다. DesignerSerializer 코드 예제에서 ExampleActivityMarkupSerializer는 ExampleActivity 클래스의 사용자 지정 serializer입니다. ExampleActivityMarkupSerializer는 특성의 두 번째 매개 변수인 WorkflowMarkupSerializer에서 상속합니다.

serialization 관리자는 활동을 serialize하기 시작할 때 클래스 정의를 통해 DesignerSerializer 특성의 두 번째 매개 변수에서 WorkflowMarkupSerializer의 기본 형식을 검색하여 사용자 지정 serializer 형식을 확인합니다. 그런 다음 serializer의 인스턴스를 가져와 사용합니다.

워크플로 마크업

워크플로 마크업은 Windows Workflow Foundation 런타임 엔진에서 실행될 수 있는 워크플로에 대해 설명합니다. 워크플로 마크업은 활동에서 이벤트가 발생할 때 활성화되는 연결된 논리와 워크플로를 구성하는 활동 계층 구조에 대해 설명하는 데 사용되는 구성 요소 serialization 체계입니다.

워크플로 마크업에는 워크플로 마크업에 대해 설명하기 위한 고정된 문법이 없습니다. 워크플로 마크업은 개체의 계층 구조를 해당하는 속성 및 메서드와 함께 나타내는 데 사용할 있는 일반 체계를 정의합니다. 각 활동에는 활동 메타데이터가 개체에 대해 정의된 마크업으로 표현될 수 있도록 하는 serialization 논리가 있습니다.

자세한 내용은 워크플로 마크업 사용을 참조하십시오.

참고 항목

참조

System.Workflow.ComponentModel.Serialization

개념

사용자 지정 활동 Serialize
방법: 워크플로 컴파일
워크플로 마크업 사용

기타 리소스

워크플로 개발

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.