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 상태로 유지됩니다.
.NET