Architektura Windows Workflow

Windows Workflow Foundation (WF) zvyšuje úroveň abstrakce pro vývoj interaktivních dlouhotrvajících aplikací. Jednotky práce jsou zapouzdřené jako aktivity. Aktivity běží v prostředí, které poskytuje zařízení pro řízení toku, zpracování výjimek, šíření chyb, trvalost stavových dat, načítání a uvolňování probíhajících pracovních postupů z paměti, sledování a toku transakcí.

Architektura aktivit

Činnosti se vyvíjejí jako typy CLR, které jsou odvozeny buď z , , nebo , nebo NativeActivityjejich variant, které vracejí hodnotu, Activity<TResult>, CodeActivity<TResult>, AsyncCodeActivity<TResult>nebo NativeActivity<TResult>. AsyncCodeActivityCodeActivityActivity Vývoj aktivit odvozených od Activity uživatele umožňuje sestavit předem existující aktivity k rychlému vytvoření jednotek práce, které se spouštějí v prostředí pracovního postupu. CodeActivity, na druhé straně umožňuje vytvářet logiku spouštění ve spravovaném kódu, a to především CodeActivityContext pro přístup k argumentům aktivity. AsyncCodeActivity je podobný s tím rozdílem CodeActivity , že se dá použít k implementaci asynchronních úloh. Vývoj aktivit odvozených od NativeActivity uživatelů umožňuje přístup k modulu runtime prostřednictvím NativeActivityContext funkcí, jako je plánování podřízených položek, vytváření záložek, vyvolání asynchronní práce, registrace transakcí a další.

Aktivity vytváření, které jsou odvozeny z Activity je deklarativní a tyto aktivity mohou být vytvořené v XAML. V následujícím příkladu je volána Prompt aktivita pomocí dalších aktivit pro tělo provádění.

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

Kontext aktivity

Toto ActivityContext je rozhraní autora aktivity k modulu runtime pracovního postupu a poskytuje přístup k mnoha funkcím modulu runtime. V následujícím příkladu je definována aktivita, která používá kontext spuštění k vytvoření záložky (mechanismus, který aktivitě umožňuje zaregistrovat bod pokračování ve svém spuštění, který lze obnovit hostitelem předávající data do aktivity).

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

Životní cyklus aktivity

Instance aktivity se spustí ve Executing stavu. Pokud nejsou zjištěny výjimky, zůstane v tomto stavu, dokud se nedokončí všechny podřízené aktivity a všechny ostatní čekající práce (Bookmark například objekty) se dokončí, v jakém okamžiku Closed přejde do stavu. Nadřazená instance aktivity může požádat o zrušení podřízené položky; pokud je dítě možné zrušit, dokončí se ve Canceled stavu. Pokud během provádění dojde k vyvolání výjimky, modul runtime umístí aktivitu do Faulted stavu a rozšíří výjimku do nadřazeného řetězce aktivit. Toto jsou tři stavy dokončení aktivity:

  • Uzavřeno: Aktivita dokončila svou práci a ukončila se.

  • Zrušeno: Aktivita řádně opustila svou práci a ukončila ji. Při zadání tohoto stavu není práce explicitně vrácena zpět.

  • Chyba: Aktivita zjistila chybu a ukončila se bez dokončení své práce.

Aktivity zůstávají ve Executing stavu, kdy jsou trvalé nebo uvolněné.