Udostępnij przez


Architektura przepływu pracy systemu Windows

Program Windows Workflow Foundation (WF) podnosi poziom abstrakcji do tworzenia interaktywnych długotrwałych aplikacji. Jednostki pracy są enkapsulowane jako działania. Działania są uruchamiane w środowisku zapewniającym funkcje sterowania przepływem, obsługi wyjątków, propagacji błędów, trwałości danych stanu, wczytywania i usuwania z pamięci przepływów pracy w toku, śledzenia i przepływu transakcji.

Architektura działania

Działania są opracowywane jako typy CLR, które pochodzą z Activity, CodeActivity, AsyncCodeActivity, lub NativeActivity, albo z ich wariantów, które zwracają wartość, Activity<TResult>, CodeActivity<TResult>, AsyncCodeActivity<TResult>, lub NativeActivity<TResult>. Opracowywanie działań pochodzących z Activity programu umożliwia użytkownikowi tworzenie wstępnie istniejących działań w celu szybkiego tworzenia jednostek pracy wykonywanych w środowisku przepływu pracy. CodeActivity, z drugiej strony, umożliwia napisanie logiki wykonywania przy użyciu kodu zarządzanego, używając CodeActivityContext przede wszystkim do uzyskiwania dostępu do argumentów działań. AsyncCodeActivity jest podobny do CodeActivity z tym, że może służyć do implementowania zadań asynchronicznych. Opracowywanie czynności, które wynikają z NativeActivity, pozwala użytkownikom na dostęp do środowiska uruchomieniowego poprzez NativeActivityContext, oferując funkcje takie jak planowanie obiektów podrzędnych, tworzenie zakładek, wywoływanie pracy asynchronicznej, rejestrowanie transakcji i wiele więcej.

Działania tworzenia pochodzące z Activity są deklaratywne i mogą być tworzone w XAML. W poniższym przykładzie aktywność o nazwie Prompt jest tworzona przy użyciu innych aktywności dla ciała wykonawczego.

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

Kontekst działania

ActivityContext to interfejs autora działania dla systemu wykonawczego przepływu pracy i zapewnia dostęp do licznych funkcji tego systemu. W poniższym przykładzie zdefiniowano działanie, które używa kontekstu wykonywania do utworzenia zakładki (mechanizmu, który umożliwia działaniu zarejestrowanie punktu kontynuacji w jego wykonaniu, który może zostać wznowiony przez hosta przekazującego dane do działania).

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);
    }

Cykl życia Aktivności

Wystąpienie działania zaczyna się w Executing stanie . Jeśli nie zostaną napotkane wyjątki, pozostanie w tym stanie do momentu zakończenia wykonywania wszystkich działań podrzędnych, a wszystkie inne oczekujące prace (Bookmark na przykład obiekty) zostaną ukończone, w którym momencie przejdzie do Closed stanu. Rodzic wystąpienia działania może zażądać anulowania elementu podrzędnego; jeśli element podrzędny może zostać anulowany, zostanie ukończony w stanie Canceled. Jeśli podczas wykonywania jest zgłaszany wyjątek, środowisko uruchomieniowe umieszcza akcję w Faulted stanie i propaguje wyjątek do nadrzędnego łańcucha działań. Poniżej przedstawiono trzy stany ukończenia działania:

  • Zamknięty: Działanie zakończyło pracę i zakończyło działanie.

  • Anulowane: Działanie zakończyło swoje zadanie i się wycofało. Praca nie jest wyraźnie wycofywana w momencie przejścia do tego stanu.

  • Faulted: Działanie napotkało błąd i zakończyło się bez kończenia pracy.

Działania pozostają w stanie Executing, gdy są utrwalone lub rozładowane.