다음을 통해 공유


Windows 워크플로 아키텍처

WF(Windows Workflow Foundation)는 대화형 장기 실행 애플리케이션 개발을 위한 추상화 수준을 높입니다. 작업 단위는 활동으로 캡슐화됩니다. 활동은 흐름 제어, 예외 처리, 오류 전파, 상태 데이터의 지속성, 메모리, 추적 및 트랜잭션 흐름에서 진행 중인 워크플로의 로드 및 언로드를 위한 기능을 제공하는 환경에서 실행됩니다.

활동 아키텍처

활동은 Activity, CodeActivity, AsyncCodeActivity, 또는 NativeActivity에서 파생되거나 값을 반환하는 Activity<TResult>, CodeActivity<TResult>, AsyncCodeActivity<TResult>, 또는 NativeActivity<TResult>와 같은 변형으로 개발됩니다. 파생 Activity 되는 활동을 개발하면 사용자가 기존 활동을 어셈블하여 워크플로 환경에서 실행되는 작업 단위를 신속하게 만들 수 있습니다. CodeActivity 반면에, 실행 논리는 CodeActivityContext에서 관리 코드로 작성할 수 있으며, 이는 주로 활동 인수에 액세스하기 위해 사용됩니다. AsyncCodeActivity 는 비동기 CodeActivity 작업을 구현하는 데 사용할 수 있다는 점을 제외하고 비슷합니다. 파생 NativeActivity 된 활동을 개발하면 사용자가 자식 예약, 책갈피 만들기, 비동기 작업 호출, 트랜잭션 등록 등과 같은 기능을 통해 NativeActivityContext 런타임에 액세스할 수 있습니다.

Activity에서 파생된 작성 활동은 선언적이며, 이러한 활동은 XAML에서 작성할 수 있습니다. 다음 예제에서는 Prompt 활동을 다른 활동들을 실행 본문으로 사용하여 만듭니다.

<Activity x:Class='Prompt'  
  xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'  
    xmlns:z='http://schemas.microsoft.com/netfx/2008/xaml/schema'  
xmlns:my='clr-namespace:XAMLActivityDefinition;assembly=XAMLActivityDefinition'  
xmlns:s="clr-namespace:System;assembly=mscorlib"  
xmlns="http://schemas.microsoft.com/2009/workflow">  
<z:SchemaType.Members>  
  <z:SchemaType.SchemaProperty Name='Text' Type='InArgument(s:String)' />  
  <z:SchemaType.SchemaProperty Name='Response' Type='OutArgument(s:String)' />  
</z:SchemaType.Members>  
  <Sequence>  
    <my:WriteLine Text='[Text]' />  
    <my:ReadLine BookmarkName='r1' Result='[Response]' />  
  </Sequence>  
</Activity>  

활동 컨텍스트

워크플로 ActivityContext 런타임에 대한 활동 작성자의 인터페이스이며 런타임의 풍부한 기능에 대한 액세스를 제공합니다. 다음 예제에서는 실행 컨텍스트를 사용하여 책갈피를 만드는 작업이 정의됩니다(작업이 활동에 데이터를 전달하는 호스트가 다시 시작할 수 있는 실행에서 연속 지점을 등록할 수 있도록 하는 메커니즘).

public sealed class ReadLine : NativeActivity<string>
{
    [RequiredArgument]
    public InArgument<string> BookmarkName { get; set; }

    protected override void Execute(NativeActivityContext context)
    {
        // Create a Bookmark and wait for it to be resumed.
        context.CreateBookmark(BookmarkName.Get(context),
            new BookmarkCallback(OnResumeBookmark));
    }

    // NativeActivity derived activities that do asynchronous operations by calling
    // one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext
    // must override the CanInduceIdle property and return true.
    protected override bool CanInduceIdle
    {
        get { return true; }
    }

    public void OnResumeBookmark(NativeActivityContext context, Bookmark bookmark, object obj)
    {
        // When the Bookmark is resumed, assign its value to
        // the Result argument.
        Result.Set(context, (string)obj);
    }

활동 수명 주기

활동의 인스턴스는 Executing 상태에서 시작됩니다. 예외가 발생하지 않는 한, 모든 자식 활동의 실행이 완료되고 다른 보류 중인 작업(예: Bookmark 개체)이 완료될 때까지 이 상태를 유지합니다. 그런 후에 Closed 상태로 전환됩니다. 활동 인스턴스의 부모는 자식에게 취소를 요청할 수 있습니다. 자식이 취소될 수 있으면 Canceled 상태로 완료됩니다. 실행 중에 예외가 발생하면, 런타임은 액티비티를 상태 Faulted로 전환하고, 그 예외를 액티비티의 부모 체인으로 전파합니다. 다음은 작업의 세 가지 완료 상태입니다.

  • 닫은: 작업이 작업을 완료하고 종료되었습니다.

  • 취소: 이 활동은 정상적으로 작업을 포기하고 종료했습니다. 이 상태가 입력되면 작업이 명시적으로 롤백되지 않습니다.

  • 오류: 작업이 오류가 발생하여 작업을 완료하지 않고 종료되었습니다.

활동은 저장되거나 언로드될 때 Executing 상태로 유지됩니다.