Dela via


Arkitektur för Windows-arbetsflöde

Windows Workflow Foundation (WF) höjer abstraktionsnivån för att utveckla interaktiva långvariga program. Arbetsenheter 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 , , eller , eller deras varianter som returnerar ett värde, Activity<TResult>, CodeActivity<TResult>, AsyncCodeActivity<TResult>eller NativeActivity<TResult>.NativeActivityAsyncCodeActivityCodeActivityActivity 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 körningen NativeActivityContext via funktioner som att schemalägga underordnade, skapa bokmärken, anropa asynkront arbete, registrera transaktioner med mera.

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 körningstexten.

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

Aktivitetslivscykel

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 arbete (Bookmark objekt, till exempel) har slutförts, då det övergår till Closed tillståndet. Överordnad för en aktivitetsinstans kan begära att ett underordnat objekt avbryter. om barnet kan avbrytas slutförs det i tillståndet Canceled . Om ett undantag utlöses under körningen placerar körningen aktiviteten i Faulted tillståndet och sprider undantaget uppåt i den överordnade kedjan av aktiviteter. Följande är de tre slutförandetillstånden för en aktivitet:

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

  • Avbröts: Aktiviteten har på ett smidigt sätt övergett sitt arbete och avslutats. Arbetet återställs inte uttryckligen när det här tillståndet anges.

  • 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 tas bort.