Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Windows Workflow Foundation (WF) erhöht die Abstraktionsebene für die Entwicklung interaktiver lang laufender Anwendungen. Arbeitseinheiten werden als Aktivitäten eingeschlossen. Aktivitäten werden in einer Umgebung ausgeführt, die Einrichtungen für die Flusssteuerung, Ausnahmebehandlung, Fehlerweiterleitung, Persistenz von Zustandsdaten; Laden und Entladen laufender Workflows aus dem Speicher sowie Nachverfolgung und Transaktionsfluss bereitstellt.
Aktivitätsarchitektur
Aktivitäten werden als CLR-Typen entwickelt, die entweder von Activity, CodeActivity, AsyncCodeActivity oder NativeActivity abgeleitet werden, oder deren Varianten, die einen Wert zurückgeben, Activity<TResult>, CodeActivity<TResult>, AsyncCodeActivity<TResult> oder NativeActivity<TResult>. Indem Aktivitäten entwickelt werden, die von Activity abgeleitet sind, kann der Benutzer bereits vorhandene Aktivitäten zusammenstellen, um schnell Arbeitsblöcke zu erstellen, die in der Workflow-Umgebung ausgeführt werden. CodeActivity auf der anderen Seite ermöglicht es, Ausführungslogik in verwaltetem Code zu erstellen und CodeActivityContext wird hauptsächlich für den Zugriff auf Aktivitätsargumente verwendet. AsyncCodeActivity ist vergleichbar mit CodeActivity, außer dass es für asynchrone Aufgaben verwendet werden kann. Das Entwickeln von Aktivitäten, die von NativeActivity abgeleitet werden, ermöglicht Benutzern, über den NativeActivityContext auf die Laufzeit zuzugreifen, um Funktionen wie die Planung untergeordneter Elemente, das Erstellen von Lesezeichen, das Aufrufen asynchroner Arbeit, das Registrieren von Transaktionen und viele mehr zu nutzen.
Erstellungsaktivitäten, die von Activity abgeleitet werden, sind deklarativ und diese Aktivitäten können in XAML verfasst 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='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>
Aktivitätskontext
Das ActivityContext-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 den Ausführungskontext verwendet, um eine Textmarke zu erstellen (der Mechanismus, mit dem eine Aktivität einen Fortsetzungspunkt in seiner Ausführung registrieren kann, die von einem Host fortgesetzt werden kann, der Daten an die Aktivität übergibt).
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);
}
Aktivitätslebenszyklus
Eine Instanz einer Aktivität beginnt im Executing Zustand. 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 ü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 abgeschlossen. Wenn während der Ausführung eine Ausnahme ausgelöst wird, übergibt die Laufzeit die Aktivität in den Faulted Zustand und verteilt die Ausnahme bis zur übergeordneten Aktivitätskette. Im Folgenden sind die drei Abschlusszustände einer Aktivität aufgeführt:
Geschlossen: Die Aktivität hat ihre Arbeit abgeschlossen und beendet.
Abgebrochen: Die Aktivität hat ihre Arbeit reibungslos aufgegeben und beendet. Die Arbeit wird nicht explizit zurückgesetzt, wenn dieser Zustand eingegeben wird.
Bemängelt: Bei der Aktivität ist ein Fehler aufgetreten und wurde beendet, ohne die Arbeit abzuschließen.
Beim dauerhaften Speichern und Entladen verbleiben Aktivitäten im Executing-Zustand.