Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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 Activity, CodeActivity, AsyncCodeActivity ou NativeActivity, ou das suas variantes que retornam um valor, Activity<TResult>, CodeActivity<TResult>, AsyncCodeActivity<TResult> ou NativeActivity<TResult>. O desenvolvimento de atividades que derivam de Activity permite que o utilizador compose atividades pré-existentes para rapidamente criar unidades de trabalho que são executadas no ambiente de fluxo de 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, exceto que pode ser utilizado para implementar tarefas assíncronas. O desenvolvimento de atividades que derivam de NativeActivity permite que os utilizadores acedam ao sistema em tempo real através de NativeActivityContext para funcionalidades como agendamento de tarefas dependentes, criação de marcadores, invocação de trabalho assíncrono, registo de transações e muito mais.
As atividades de criação que derivam de Activity são declarativas e podem ser criadas em XAML. No exemplo a seguir, uma atividade denominada Prompt é criada utilizando outras atividades para compor o seu 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 runtime do fluxo de trabalho e fornece acesso à vasta gama de funcionalidades do runtime. 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 estado de Executing. 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 execução Faulted, o tempo de execução fará com que a atividade fique no estado Faulted e propagará a exceção pela corrente ascendente da cadeia de atividades pai. A seguir estão os três estados de conclusão de uma atividade:
Fechado: A atividade concluiu o seu trabalho e saiu.
Cancelado: A atividade abandonou graciosamente o seu trabalho e saiu. O trabalho não é explicitamente revertido quando se entra nesse estado.
Falha: A atividade encontrou um erro e saiu sem completar o seu trabalho.
As atividades permanecem na Executing condição quando persistem ou são descarregadas.