Architektura programu Windows Workflow
Program Windows Workflow Foundation (WF) podnosi poziom abstrakcji do tworzenia interaktywnych długotrwałych aplikacji. Jednostki pracy są hermetyzowane jako działania. Działania są uruchamiane w środowisku zapewniającym funkcje sterowania przepływem, obsługi wyjątków, propagacji błędów, trwałości danych stanu, ładowania i zwalniania przepływów pracy w toku z pamięci, śledzenia i przepływu transakcji.
Architektura działania
Działania są opracowywane jako typy CLR, które pochodzą z Activity, CodeActivity, AsyncCodeActivitylub NativeActivityich wariantów, które zwracają wartość, Activity<TResult>, CodeActivity<TResult>, AsyncCodeActivity<TResult>lub NativeActivity<TResult>. Opracowywanie działań pochodzących z Activity programu umożliwia użytkownikowi tworzenie wstępnie istniejących działań w celu szybkiego tworzenia jednostek pracy wykonywanych w środowisku przepływu pracy. CodeActivityZ drugiej strony umożliwia tworzenie logiki wykonywania w kodzie zarządzanym przy użyciu przede CodeActivityContext wszystkim na potrzeby dostępu do argumentów działań. AsyncCodeActivity jest podobny do CodeActivity tego, że może służyć do implementowania zadań asynchronicznych. Opracowywanie działań pochodzących z NativeActivity programu umożliwia użytkownikom uzyskiwanie dostępu do środowiska uruchomieniowego za pomocą NativeActivityContext funkcji, takich jak planowanie elementów podrzędnych, tworzenie zakładek, wywoływanie pracy asynchronicznej, rejestrowanie transakcji i nie tylko.
Działania tworzenia pochodzące z Activity klasy deklaratywnej i te działania mogą być tworzone w języku XAML. W poniższym przykładzie działanie o nazwie Prompt
jest tworzone przy użyciu innych działań dla treści wykonywania.
<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>
Kontekst działania
Jest ActivityContext to interfejs autora działania dla środowiska uruchomieniowego przepływu pracy i zapewnia dostęp do bogactwa funkcji środowiska uruchomieniowego. W poniższym przykładzie zdefiniowano działanie, które używa kontekstu wykonywania do utworzenia zakładki (mechanizmu, który umożliwia działaniu zarejestrowanie punktu kontynuacji w jego wykonaniu, który może zostać wznowiony przez hosta przekazującego dane do działania).
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);
}
Cykl życia działania
Wystąpienie działania zaczyna się w Executing stanie . Jeśli nie zostaną napotkane wyjątki, pozostanie w tym stanie do momentu zakończenia wykonywania wszystkich działań podrzędnych, a wszystkie inne oczekujące prace (Bookmark na przykład obiekty) zostaną ukończone, w którym momencie przejdzie do Closed stanu. Element nadrzędny wystąpienia działania może zażądać anulowania elementu podrzędnego; jeśli element podrzędny może zostać anulowany, zostanie ukończony w Canceled stanie . Jeśli podczas wykonywania jest zgłaszany wyjątek, środowisko uruchomieniowe umieszcza działanie w Faulted stanie i propaguje wyjątek w nadrzędnym łańcuchu działań. Poniżej przedstawiono trzy stany ukończenia działania:
Zamknięte: działanie zakończyło pracę i zakończyło pracę.
Anulowano: Działanie bezpiecznie porzuciło swoją pracę i zakończyło pracę. Praca nie jest jawnie cofnięta po wprowadzeniu tego stanu.
Błąd: działanie napotkało błąd i zostało zakończone bez kończenia pracy.
Działania pozostają w Executing stanie utrwalone lub rozładowane.