Arkitektur för Windows-arbetsflöde

Windows Workflow Foundation (WF) höjer abstraktionsnivån för att utveckla interaktiva långvariga program. Arbetsuppgifter kapslas in som aktiviteter. Aktiviteter körs i en miljö som tillhandahåller funktioner för flödeskontroll, undantagshantering, felspridning, beständighet av tillståndsdata, inläsning och avlastning av pågående arbetsflöden från minne, spårning och transaktionsflöde.

Aktivitetsarkitektur

Aktiviteter utvecklas som CLR-typer som härleds från antingen Activity, CodeActivity, AsyncCodeActivity, eller NativeActivity, eller deras varianter som returnerar ett värde, Activity<TResult>, CodeActivity<TResult>, AsyncCodeActivity<TResult>, eller NativeActivity<TResult>. Genom att utveckla aktiviteter som härleds från Activity kan användaren sätta ihop befintliga aktiviteter för att snabbt skapa arbetsenheter som körs i arbetsflödesmiljön. CodeActivity, å andra sidan, gör att körningslogik kan redigeras i hanterad kod med främst CodeActivityContext för åtkomst till aktivitetsargument. AsyncCodeActivity liknar CodeActivity förutom att den kan användas för att implementera asynkrona uppgifter. Genom att utveckla aktiviteter som härleds från NativeActivity kan användarna komma åt runtime genom NativeActivityContext för funktionalitet som att schemalägga underordnade, skapa bokmärken, anropa asynkront arbete, registrera transaktioner och mer.

Redigeringsaktiviteter som härleds från Activity är deklarativa och dessa aktiviteter kan redigeras i XAML. I följande exempel skapas en aktivitet med namnet Prompt med hjälp av andra aktiviteter för exekveringskroppen.

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

Aktivitetskontext

ActivityContext är aktivitetsförfattarens gränssnitt till arbetsflödeskörningen och ger åtkomst till körningens mängd funktioner. I följande exempel definieras en aktivitet som använder körningskontexten för att skapa ett bokmärke (den mekanism som gör att en aktivitet kan registrera en fortsättningspunkt i körningen som kan återupptas av en värd som skickar data till aktiviteten).

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

Livscykel för aktivitet

En instans av en aktivitet startar i tillståndet Executing . Om inte undantag påträffas förblir det i det här tillståndet tills alla underordnade aktiviteter har slutförts och alla andra väntande arbeten (Bookmark-objekt, till exempel) har slutförts, och övergår därefter till Closed-tillståndet. Den överordnade instansen för en aktivitetsinstans kan begära att ett underordnat objekt avbryts. Om det underordnade kan avbrytas, slutförs det i tillståndet Canceled. Om ett undantag utlöses under körningen placerar körmiljön aktiviteten i tillståndet Faulted och sprider undantaget uppåt i aktiviteternas överordnade kedja. Följande är de tre slutförandetillstånden för en aktivitet:

  • Stängd: Aktiviteten har slutfört sitt arbete och avslutats.

  • Annullerad: Aktiviteten har på ett graciöst sätt övergett sitt arbete och avslutat. Arbetet återställs inte uttryckligen när detta tillstånd inträds.

  • Fel: Aktiviteten har påträffat ett fel och har avslutats utan att slutföra sitt arbete.

Aktiviteter förblir i tillståndet Executing när de sparas eller avlastas.