Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Windows Workflow Foundation (WF) eleva el nivel de abstracción para desarrollar aplicaciones interactivas de larga duración. Las unidades de trabajo se encapsulan como actividades. Las actividades se ejecutan en un entorno que proporciona instalaciones para el control de flujo, el control de excepciones, la propagación de errores, la persistencia de datos de estado, la carga y descarga de flujos de trabajo en curso desde la memoria, el seguimiento y el flujo de transacciones.
Arquitectura de actividad
Las actividades se desarrollan como tipos CLR que derivan de Activity, CodeActivity, AsyncCodeActivity o NativeActivity, o de sus variantes que devuelven un valor, Activity<TResult>, CodeActivity<TResult>, AsyncCodeActivity<TResult> o NativeActivity<TResult>. El desarrollo de actividades derivadas de Activity permite al usuario ensamblar actividades preexistentes para crear rápidamente unidades de trabajo que se ejecutan en el entorno de flujo de trabajo. CodeActivityPor otro lado, permite crear lógica de ejecución en código administrado mediante CodeActivityContext principalmente para el acceso a argumentos de actividad. AsyncCodeActivity es similar a CodeActivity excepto que se puede usar para implementar tareas asincrónicas. El desarrollo de actividades que derivan de NativeActivity permite a los usuarios acceder al tiempo de ejecución a través de NativeActivityContext para funcionalidades como programar tareas secundarias, crear marcadores, invocar trabajos asincrónicos, registrar transacciones y más.
La creación de actividades derivadas de Activity es declarativa y estas actividades se pueden crear en XAML. En el siguiente ejemplo, una actividad llamada Prompt
se crea usando otras actividades para el cuerpo de ejecución.
<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 de actividad
ActivityContext es la interfaz del autor de la actividad en el tiempo de ejecución del flujo de trabajo y proporciona acceso a la amplia variedad de características del tiempo de ejecución. En el ejemplo siguiente, se define una actividad que usa el contexto de ejecución para crear un marcador (el mecanismo que permite a una actividad registrar un punto de continuación en su ejecución que un host puede reanudar pasando datos a la actividad).
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 de la actividad
Una instancia de una actividad se inicia en el estado Executing. A menos que se encuentren excepciones, permanece en este estado hasta que todas las actividades secundarias se hayan terminado de ejecutar y se hayan completado otros trabajos pendientes (objetos Bookmark, por ejemplo). Una vez llegado este punto, cambia al estado Closed. El elemento primario de una instancia de actividad puede pedir a un elemento secundario que cancele; si el elemento secundario puede cancelarse, se completa en el estado Canceled. Si se produce una excepción durante la ejecución, el tiempo de ejecución coloca la actividad en el Faulted estado y propaga la excepción a la cadena primaria de actividades. A continuación se muestran los tres estados de finalización de una actividad:
Cerrado: la actividad ha completado su trabajo y ha salido.
Cancelado: la actividad ha abandonado su trabajo sin contratiempos y ha salido. En este estado, el trabajo no se revierte de manera explícita.
Con errores: la actividad ha encontrado un error y ha salido sin completar su trabajo.
Las actividades permanecen en el estado Executing cuando se conservan o descargan.