Freigeben über


Architektur von Windows-Workflows

Dieses Thema gilt für Windows Workflow Foundation 4.

Windows Workflow Foundation (WF) stuft die Abstraktionsebene zum Entwickeln von interaktiven Anwendungen mit langer Laufzeit herauf. Arbeitseinheiten werden als Aktivitäten gekapselt. Aktivitäten werden in einer Umgebung ausgeführt, die Funktionen für Flusssteuerung, Ausnahmebehandlung, Fehlerweitergabe, Persistenz von Zustandsdaten, Laden und Entladen von aktuell verarbeiteten Workflows aus dem Arbeitsspeicher, Nachverfolgung und Transaktionsfluss bietet.

Aktivitätsarchitektur

Aktivitäten werden als CLR-Typen entwickelt, die von Activity, CodeActivity oder NativeActivity abgeleitet werden oder aber von den entsprechenden Varianten, die einen Wert zurückgeben: Activity, CodeActivity oder NativeActivity. Das Entwickeln von Aktivitäten, die von Activity abgeleitet werden, ermöglicht dem Benutzer, bereits vorhandene WorkflowElement-Objekte zusammenzustellen, um so schnell Arbeitseinheiten zu erstellen, die in der Workflowumgebung ausgeführt werden. CodeActivity hingegen ermöglicht das Schreiben von Ausführungslogik in verwaltetem Code mit CodeActivityContext, hauptsächlich für den Zugriff auf Aktivitätsargumente. Das Entwickeln von Aktivitäten, die von NativeActivity abgeleitet werden, ermöglicht Benutzern, über den ActivityExecutionContext auf die Laufzeit zuzugreifen, um Funktionen wie die Planung untergeordneter Elemente, Lesezeichen, das Aufrufen asynchroner Arbeit, die Registrierung von Transaktionen und viele mehr zu nutzen.

Das Entwickeln von Aktivitäten, die von Activity abgeleitet werden, ist deklarativ. Diese Aktivitäten können in XAML erstellt werden. Im folgenden Beispiel wird eine Aktivität mit dem Namen Prompt erstellt, wobei andere Aktivitäten für den Ausführungstext verwendet werden.

<Activity x:Class='Prompt'
  xmlns:x='https://schemas.microsoft.com/winfx/2006/xaml'
    xmlns:z='https://schemas.microsoft.com/netfx/2008/xaml/schema'
xmlns:my='clr-namespace:XAMLActivityDefinition;assembly=XAMLActivityDefinition'
xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns="https://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 Bookmark='r1' Result='[Response]' />
  </Sequence>
</Activity>

Aktivitätsausführungskontext

Das ActivityExecutionContext-Objekt ist für den Ersteller der Aktivität die Schnittstelle zur Workflowlaufzeit und bietet Zugriff auf die zahlreichen Funktionen der Laufzeit. Im folgenden Beispiel wird eine Aktivität definiert, die mit dem Ausführungskontext ein Lesezeichen erstellt (der Mechanismus, der einer Aktivität ermöglicht, in der Ausführung einen Fortsetzungspunkt zu registrieren, sodass die Fortsetzung erfolgt, wenn ein Host Daten an die Aktivität übergibt).

public class SimpleReadLine : WorkflowElement
{
    protected override void Execute(ActivityExecutionContext context)
    {
        context.CreateBookmark(this. DisplayName,
                new ActivityExecutionCallback(OnReadComplete));
    }

    void OnReadComplete(ActivityExecutionContext context, object state)
    {
        string dataRead = (string)state;
        Console.WriteLine("You entered: {0}", dataRead);
    }
}

Aktivitätslebenszyklus

Eine Instanz einer Aktivität startet mit dem Executing-Zustand (wird ausgeführt). Wenn keine Ausnahmen auftreten, verbleibt die Instanz in diesem Zustand, bis die Ausführung aller untergeordneten Aktivitäten beendet wurde und alle weiteren ausstehenden Arbeitsvorgänge (z. B. Bookmark-Objekte) abgeschlossen sind. An diesem Punkt geht die Instanz in den Closed-Zustand (abgeschlossen) über. Das übergeordnete Element einer Aktivitätsinstanz kann den Abbruch eines untergeordneten Elements anfordern. Wenn das untergeordnete Element abgebrochen werden kann, wird es mit dem Canceled-Zustand (abgebrochen) abgeschlossen. Wenn während der Ausführung eine Ausnahme ausgelöst wird, versetzt die Laufzeit das WorkflowElement-Objekt in den Faulted-Zustand (Fehler) und gibt die Ausnahme an die Kette übergeordneter Aktivitäten weiter. Dies sind die drei Abschlusszustände einer Aktivität:

  • Closed: Die Aktivität hat alle Arbeitsvorgänge abgeschlossen und wurde beendet.

  • Canceled: Die Aktivität hat die Arbeit ordnungsgemäß abgebrochen und wurde beendet. Für die Arbeit wird kein expliziter Rollback ausgeführt, wenn dieser Zustand eintritt.

  • Faulted: Es ist ein Fehler aufgetreten, und die Aktivität wurde ohne Abschließen der Arbeit beendet.

Beim dauerhaften Speichern und Entladen verbleiben Aktivitäten im Executing-Zustand.