Arquitetura de fluxo de trabalho do Windows
O Windows Workflow Foundation (WF) aumenta o nível de abstração para o desenvolvimento de aplicativos interativos de longa execução. As unidades de trabalho são encapsuladas como atividades. As atividades são executadas em um ambiente que fornece recursos para controle de fluxo, tratamento de exceções, propagação de falhas, persistência de dados de estado, carregamento e descarregamento de fluxos de trabalho em andamento da memória, rastreamento e fluxo de transações.
Arquitetura de Atividades
As atividades são desenvolvidas como tipos CLR que derivam de , CodeActivityActivity, AsyncCodeActivity, ou , ou NativeActivitysuas variantes que retornam um valor, Activity<TResult>, CodeActivity<TResult>, AsyncCodeActivity<TResult>, ou NativeActivity<TResult>. O desenvolvimento de atividades derivadas permite que o usuário monte atividades pré-existentes para criar rapidamente unidades de trabalho que são executadas no ambiente de fluxo de Activity trabalho. CodeActivity, por outro lado, permite que a lógica de execução seja criada em código gerenciado usando CodeActivityContext principalmente para acesso a argumentos de atividade. AsyncCodeActivity é semelhante ao CodeActivity fato de que pode ser usado para implementar tarefas assíncronas. O desenvolvimento de atividades derivadas permite que os usuários acessem o tempo de execução por meio de NativeActivity funcionalidades como agendar crianças, criar marcadores, invocar trabalho assíncrono NativeActivityContext , registrar transações e muito mais.
As atividades de criação derivadas são Activity declarativas e essas atividades podem ser criadas em XAML. No exemplo a seguir, uma atividade chamada Prompt
é criada usando outras atividades para o corpo de execução.
<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>
Contexto da Atividade
A ActivityContext é a interface do autor da atividade para o tempo de execução do fluxo de trabalho e fornece acesso à riqueza de recursos do tempo de execução. No exemplo a seguir, é definida uma atividade que usa o contexto de execução para criar um marcador (o mecanismo que permite que uma atividade registre um ponto de continuação em sua execução que pode ser retomado por um host passando dados para a atividade).
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);
}
Ciclo de Vida da Atividade
Uma instância de uma atividade começa no Executing estado. A menos que exceções sejam encontradas, ele permanece nesse estado até que todas as atividades filho sejam concluídas e qualquer outro trabalho pendente (Bookmark objetos, por exemplo) seja concluído, momento em que transita para o Closed estado. O pai de uma instância de atividade pode solicitar que uma criança cancele; se a criança puder ser cancelada, ela será concluída no Canceled estado. Se uma exceção for lançada durante a Faulted execução, o tempo de execução colocará a atividade no estado e propagará a exceção para cima da cadeia pai de atividades. A seguir estão os três estados de conclusão de uma atividade:
Encerrada: A atividade concluiu o seu trabalho e saiu.
Cancelada: A atividade abandonou graciosamente o seu trabalho e saiu. O trabalho não é explicitamente revertido quando esse estado é inserido.
Falha: A atividade encontrou um erro e saiu sem concluir seu trabalho.
As atividades permanecem no Executing estado quando são mantidas ou descarregadas.