Sie sind auf Seite 1von 28

Al Estilo Workflow

Entendiendo Windows Workflow Foundation

David Chappell, Chappell & Associates


Abril 2009

Copyright Microsoft Corporation 2009. All rights reserved.

Contents

Introduccin a Windows Workflow Foundation


Todos los programadores que codificamos, queremos construir buen software. Si el software es una
aplicacin de servidor, Ser buen software significa que pueda escalar bien, maneje grandes cargas sin
consumir muchos recursos. Una gran aplicacin tambin deber ser fcil de entender, tanto para el
constructor como para las personas que le dan mantenimiento.
Alcanzar estas dos metas no es tarea fcil. Procedimientos que ayudan a escalar a las aplicaciones
tienden a dividir el cdigo, dividir el cdigo en trozos puede ser difcil de entender. Por otro lado cdigo
unificado que vive en un solo ejecutable puede hacer imposible escalar la aplicacin. Lo que se
necesita es una forma de mantener la lgica de la aplicacin unificada, hacindola mas entendible,
mientras que se permite que la aplicacin escale.
Lograr esto es la meta principal de Windows Workflow Foundation (WF). El soporte de lgica usando
workflows, WF proporciona los fundamentos para crear aplicaciones unificadas y escalables. Adems
WF puede simplificar otros retos de programacin, tales como coordinar trabajo en paralelo, rastrear la
ejecucin de programas y mucho ms.
WF fue liberado con .NET Framework 3.0 en 2006, y despus actualizado en .NET Framework 3.5.
Estas primeras versiones fueron tiles, especialmente para vendedores de software independientes
(ISVs), pero nunca se convirtieron en la tecnologa favorita para desarrolladores empresariales. Con la
versin WF que es parte de .NET Framework 4, sus creadores apuestan a cambiar esto. La meta
mayor de esta versin es hacer WF una parte estndar de las herramientas de programacin para
todos los programadores de .NET.
Al igual que cualquier otra tecnologa WF requiere entender que es, porque es til, y cuando tiene
sentido utilizarla. La meta de est introduccin es hacer claro esto. Aqu no se aprender a como
escribir aplicaciones WF, pero usted podr echar una mirada a lo que ofrece WF, porque es de la
forma en que es, y como puede mejorar la vida de los programadores. En otras palabras, usted
empezara a entender el estilo de programacin por workflows.

El Reto: Escribir Lgica de Aplicacin unificada y Escalable


Una forma simple de escribir programas es crear una aplicacin unificada que ejecuta en un solo
procesador en un solo equipo o computadora. La Figura 1 ilustra esta idea.

Figura 1: La lgica de la Aplicacin puede ser creada como un todo


unificado, y despus ejecutado en un hilo particular en un proceso
ejecutando en una sola mquina.
El simple pseudo-cdigo de este ejemplo muestra la clase de cosas que una aplicacin hace.:

Mantiene el Estado, el cual est representado por una simple variable de tipo
texto.

Obtiene entrada del mundo exterior, tal como recibir una peticin de un cliente.
Una aplicacin simple puede solamente leer de la consola, mientras que una
ms compleja puede recibir una peticin HTTP desde un navegador Web o un
mensaje SOAP de otra aplicacin.

Enviar su salida al mundo exterior. Dependiendo de como esta construida, la


aplicacin puede hacer esto via HTTP, o un mensaje SOAP, o escribiendo un
mensaje a la consoila, de alguna otra forma.

Proporciona trayectorias alternas a travs de lgica usando proposiciones de


control de flujo tales con if/else y while.

Hace trabajo ejecutando el cdigo apropiado en cada punto dentro de la


aplicacin.

En el procedimiento unificado mostrado aqu, la lgica de la aplicacin gasta su vida ejecutando en un


hilo dentro de un proceso particular sobre una sola mquina. Este procedimiento simple tiene varias
ventajas. La lgica puede ser implementada en una forma directa, la forma unificada.
Esto ayuda a las personas que trabajan con el cdigo a entenderlo mejor, y tambin hace explicito el
orden de eventos permitidos. En la Figura 1, por ejemplo, es evidente que la primera solicitud del
cliente antecede a la segunda- el control de flujo de la aplicacin as lo requiere. Cuando la segunda
peticin llega, no hay necesidad de verificar que la primera peticin ya ha sido procesada, puesto que
no hay otra trayectoria a travs de la aplicacin.
Otra ventaja de este enfoque es que trabajar con el estado de la aplicacin es fcil. El estado es
mantenido en la memoria del proceso, y puesto que el proceso ejecuta continuamente hasta que el
trabajo termina, el estado est siempre disponible. El programador solamente accesa variables
ordinarias
Sin embargo este estilo de programacin bsico tiene limitaciones. Cuando la aplicacin necesita
esperar por datos de entrada, ya sea desde un usuario en la consola, un client de servicio Web, o
cualquier otra cosa, la aplicacin simplemente se bloquea. Tanto el hilo como el proceso que se estn
utilizando se mantendrn en espera hasta que la entrada sea recibida, sin importar el tiempo que esto
lleve. Puesto que los hilos y los procesos son recursos escasos, aplicaciones que se quedan en
espera con estos recursos en utilizacin cuando estn a la espera del suministro de datos, son
aplicaciones que no escalan bien.
Un estilo ms escalable es detener la ejecucin de la aplicacin cuando est esperando por datos de
entrada, y despus reiniciarla cuando los datos de entrada lleguen. Este procedimiento no gasta
recursos, puesto que la aplicacin no est en espera con los recursos hilo o proceso bloqueados,
cuando no los necesita. Hacindolo de esta forma tambin permite a la aplicacin ejecutar en diferente
proceso y en diferentes maquinas a diferentes tiempos. En vez de estar atada a un solo sistema, como
en la Figura 1, la aplicacin puede se ejecutada en cualquiera de las maquinas disponibles. Esto
ayuda a la escalabilidad, puesto que el trabajo puede ser ms fcilmente distribuido a travs de
diferentes computadoras. La figura 2 muestra cmo se veria esto.

Figura 2: La Lgica de la Aplicacin puede ser dividida en pedazos de


codigo, los cuales todos comparten un estado comun, y los cuales pueden
ejecutar en diferentes maquinas.
Este ejemplo de aplicacin contiene la misma lgica que el ejemplo anterior, pero ahora es dividido en
pedazos de cdigo separados. Cuando la primera solicitud de datos llega del cliente, un adecuado
pedazo de cdigo es cargado y ejecutado. Una vez que esta solicitud ha sido procesada y se enva
una respuesta, este cdigo puede ser descargado- nada se mantendr en memoria, Cuando la
segunda peticin llegue del cliente, el pedazo de cdigo que la maneja es cargado y ejecutado. Como
la Figura 2 muestra, este pedazo de cdigo puede ejecutarse en un hilo, proceso o mquina diferente
de aquella en que ejecuto el primer pedazo de cdigo. Una vez que el segundo pedazo de cdigo ha
sido procesado tambin puede ser descargado, liberando la memoria que estuvo utilizando.
Un ejemplo comn de tecnologa que trabaja de esta forma es ASP.NET. Un programador implementa
una aplicacin ASP.NET como un conjunto de pginas, cada una conteniendo alguna parte de la
lgica de la aplicacin. Cuando llega una peticin, la pgina adecuada es cargada, ejecutada y
despus descargada.
Una aplicacin construida en este estilo puede utilizar recursos de maquina ms eficiente que una
creada utilizando el procedimiento ms simple mostrado en la figura 1, y as escalara mejor. Sin
embargo hemos de pagar por esta mejora de escalabilidad con ms complejidad. Los varios pedazos
de cdigo debern de alguna forma compartir el estado, como la Figura 2 muestra. Debido a que cada
pedazo de cdigo es cargado bajo demanda, ejecutado y despus descargado, este estado deber
ser almacenado externamente, tal como en una base de datos o algn otro almacenamiento
persistente. En vez de acceder a variables ordinarias, como en el caso del escenario de la Figura 1, un
programador ahora deber hacer cosas especiales para adquirir y guardar el estado de la aplicacin.
En Aplicaciones ASP.NET, por ejemplo, los programadores pueden escribir el estado directamente a
una base de datos, acceder al objeto de sesin, o utilizar algn otro procedimiento.

Otro costo de esta mejora en escalabilidad es que el cdigo no proporciona una vista unificada de la
lgica general del programa. En la versin mostrada en la Figura 1, el orden en el cual el programa
espera datos es obvio Solamente hay una trayectoria posible por el cdigo. Con la versin de la
Figura 2 , sin embargo, el control de flujo no es evidente. En Efecto, el pedazo de cdigo que maneja
la segunda peticin del cliente puede necesitar verificar si el primer pedazo de cdigo ya fue ejecutado.
Para una aplicacin que implementa cualquier clase de proceso de negocio significante, el
entendimiento y la correcta implementacin del control de flujo a travs de varios pedazos de cdigo
puede ser un reto.
La situacin es esta: Escribir aplicaciones unificadas hace la vida del programador mas facil y el codigo
fcil de entender, pero el resultado no escala bien. Escribir aplicaciones en pedazos de codigo que
comparten un estado externo, tal como las aplicaciones ASP.NET, permite la escalabilidad pero hace
el manejo del estado difcil y hace perder el control de flujo unificado. Lo que queremos es una forma
de hacer ambas cosas: escribir lgica de negocio escalable con una administracin del estado simple,
y que permita tener una vista unificada del control de flujo de la aplicacin.
Esto es exactamente lo que Workflow proporciona. La siguiente seccin muestra como:

La Solucin: El Estilo WorkFlow


Entendiendo como una aplicacin WF resuelve estos problemas (y otros) requiere saber las bases de
cmo funciona un workflow. Veremos cmo esta tecnologa puede hacer la vida mejor para los
programadores en un gran sorprendente nmero de casos.
Creando una Lgica Unificada de la Aplicacin
Una aplicacin basada en workflow usando WF hace las mismas clases de cosas que una aplicacin
ordinaria: Mantiene estado, obtiene entrada desde y enva salida hacia el mundo exterior , proporciona
control de flujo, y ejecuta codigo que implementa el trabajo de la aplicacin. En un workflow WF, sin
embargo, todas estas cosas son hechas por actividades (activities). Figura 3 muestra como se ve esto,
en comparacin con el procedimiento de codigo unificado.

Figura 3: En un workflow WF, todo el trabajo del programa es realizado por


activities.
Como la Figura 3 muestra, cada flujo de trabajo tiene una actividad contenedora que contiene todas
las dems. Aqu la actividad contenedora es llamada una Secuencia (Sequence) , ,y al igual que un
programa ordinario puede tener variables que mantienen su estado. Debido a que una Sequence es
una actividad Compuesta (composite), tambin puede contener otras actividades (activities)

En este simple ejemplo, el flujo de trabajo empieza con una actividad ReceiveMessageque obtiene la
entrada del mundo exterior. Esto es seguido por una actividad If , la cual implementa una bifurcacin.
. If es tambien una actividad compuesta, conteniendo otras actividades (etiquetadas X y Y) que
ejecutan el trabajo realizado en cada bifurcacin. La Actividad If es seguida por una actividad
SendMessage que enva alguna salida al mundo exterior. Otra actividad ReceiveMessageapacere a
continuacin, la cual obtiene ms entradas, y despus es seguida por una actividad While . La
actividad While contiene otra actividad, Z, que hace el trabajo del ciclo while. El workflow completo
termina con una actividad SendMessage enviando como salida el resultado del programa.

Todas estas actividades corresponden funcionalmente a varias partes de un programa tpico,


comparado de acuerdo con el mismo color con el de la figura 2.Pero en vez de utilizar elementos interconstruidos en los lenguajes convencionales, cada actividad en un workflow WF es actualmente una
Clase. La ejecucin del workflow es realizada por el runtime del WF, un componente que sabe cmo
ejecutar actividades. La Figura 4 ilustra esta idea.

Figura 4: El runtime de WF ejecuta actividades en el orden determinado por


el workflow.
Cuando coienza la ejecucin de un workflow, el runtime de WF primero ejecuta la actividad mas
externa , la cual en este ejemplo es una Sequence. Despues jecuta la primera actividad dentro de
esta, la cual aqu es ReceiveMessage, seguida por la siguiente actividad y asi sucesivamente.
Exactamente cuales actividades son ejecutadas en una situacin particular dependen de la trayectoria
que se toma a traves del workflow. Por ejemplo, obtener un tipo de entrada en la primera actividad
ReceiveMessage puede causar que la actividad If ejecute la actividad X,mientras que otra clase de
entrada pueda causar que se ejecute la actividad Y. Justo como cualquier otro programa.
Es importante entender que el runtime de WF no conoce nada acerca del contenido interno de las
actividades que est ejecutando. No puede distinguir una actividad If de una ReceiveMessage. Lo
unico que conoce es ejecutar actividades, y despus ejecutar la siguiente. El runtime puede ver los
lmites entre actividades , sin embargo como veremos despus esto es una cosa muy til.

Un corolario importante de esto es que WF no define un lenguaje particular para describer workflowstodo depende de las actividades que un programador elija utilizar. Para hacer la vida ms fcil, WF
incluye una biblioteca de Actividades Base (Base Activity Library , BAL) que proporciona un amplio y
til conjunto de actividades (De hecho todas las actividades utilizadas aqu son parte del BAL) . Pero
los programadores son libres de crear cualquier otra actividad que ellos quieran. Incluso podran
ignorar completamente el conjunto de actividades de BAL.
La pregunta obvia aqu: Porque todo este Lio? Crear un programa usando actividades es diferente de
lo que los programadores estn acostumbrados, Porque no utilizar cdigo ordinario?
La respuesta, por supuesto, es que este procedimiento puede ayudarnos a crear ,mejor cdigo. Note
por ejemplo, que el estilo workflow da al programador un control de flujo unificado. Igual que en el caso
mostrado anteriormente en la figura 1, La logica del programa principal es un flujo coherente. Esto
hace fcil de entender, y debido a que la logica no esta separada en pedazos, no hay necesidad de
verificaciones adicionales. El workflow por si mismo expresa el control de flujo permitido.
Esto representa la mitad de nuestra meta: Crear lgica de aplicacin unificada. Pero las aplicaciones
WF pueden tambin cumplir con la segunda parte, crear aplicaciones escalables con manejo sencillo
del estado. La siguiente seccin explica como el workflow hace esto posible.
Proporcionando Escalabilidad
Para ser escalable una aplicacin de servidor no puede estar encadenada a un solo proceso sobre
una sola mquina. Mas an explcitamente dividiendo la aplicacin en pedazos de cdigo, como
paginas ASP.NET rompe lo que debera ser un control de flujo unificado. Tambin forza al
programador a trabajar con el estado explcitamente. Lo que realmente queremos es una forma de
tener nuestra lgica automticamente dividida en pedazos que puedan ejecutar en diferentes procesos
en diferentes maquinas. Tambin quisiramos que nuestra aplicacin manejara su estado por
nosotros, de tal forma que todo lo que tuviramos que hacer es acceder a variables.
Esto es exactamente lo que workflow proporciona. La Figura 5 muestra los fundamentos de como WF
realiza estas cosas.

10

Figura 5: El runtime WF descarga un workflow mientras esta en espera de


entrada de datos , y despus lo vuelve a cargar nuevamente una vez que
la entrada es recibida.
Al igual que una aplicacin, un workflow WF se bloquea esperando por sus datos de entrada . En la
Figura 5, por ejemplo, el workflow es bloqueado en la segunda actividad ReceiveMessageesperando
por la segunda solicitud del cliente (Paso 1). El runtime WF nota esto, y asi almacena el estado del
workflowy una indicacin de donde se deber resumir el workflow en un almacenamiento persistente
(paso 2). Cuando la entrada de datos llega para este workflow (paso 3), el runtime del WF encuentra
su estado persistente, despus recarga el workflow, comenzando la ejecucin donde la detuvo (paso
4). Todo esto sucede de manera automtica El programador del WF no necesita hacer nada. Debido
a que el runtime del WF puede ver dentro del workflow, el puede manejar todos estos detalles por si
mismo.
Una ventaja obvia de este procedimiento es que el workflow no se detiene a esperar en memoria
bloqueando el hilo y el proceso mientras espera por sus datos de entrada. Otra ventaja es que un
workflow almacenado en almacenamiento persistente puede potencialmente poder volver a ser
cargado en otra computadora distinta a la que originalmente estaba ejecutando.
Debido a esto, diferentes partes del workflow pueden terminar ejecutando en diferentes equipos, como
lo muestra la Figura 6

11

Figura 6: Un workflow puede terminar ejecutando en diferentes hilos, de


diferentes procesos y en distintas computadoras durante toda su vida.
En este ejemplo, suponga que el workflow maneja la primera peticin en la maquina A. Cuando un
segunda actividad ReceiveMessage causa que se bloquee ek workflow esperando por sus datos de
entrada, el runtime WF descarega el estado del workflow en almacenamiento persistente, justo como
se describi. Cuando la segunda peticin del cliente llega, es posible que para este workflow sea
recargado en un proceso en la maquina B. En vez de quedarse bloqueado esperando por sus datos
de entrada, un workflow WF puede ser movido segn sea necesario. Y el programador obtiene esta
versatilidad de a gratis- Es proporcionada automticamente por el WF.
Es notable mencionar que al runtime WF no le importa cunto tiempo le lleve al workflow esperar por
sus datos de entrada. Popdria llegar algunos segundos despus que el workflow fue almacenado en
rea persistente, algunos minutos despus, o ms aun algunos meses despus. Tanto tiempo como
se mantenga el estado del workflow en almacenamiento persistente, el workflow puede ser reiniciado.
Esto hace que la tecnologa de WF sea atractiva para construir aplicaciones que implementan
procesos de larga duracin. Pensemos en una aplicacin del proceso de Contratacin, por ejemplo,
que involucre todo desde calendarizar entrevistas iniciales para integrar nuevo personal en la
organizacin. Este proceso puede durar semanas o meses, y as administrando el estado de la
aplicacin usando WF tiene sentido. Ms an mientras que WF puede ser muy til con esta clase de
procesos de larga duracin, es importante entender que no es su nico propsito. Cualquier aplicacin
que requiera lgica escalable y unificada puede ser un buen candidato para WF.

12

En Efecto echmosle otra mirada a la Figura 6. Acaso No luce muy similar que la Figura 2, la cual
muestra como un pedazo de aplicacin (ej. Una construida solamente con ASP.NET) alcanza
escalabilidad? Y de hecho, No acaso la Figura 6 tambin tiene una similaridad con la Figura 1, la cual
muestra una aplicacin unificada construida con control de flujo lineal? WF logra ambas cosas: El
control de flujo de la aplicacin es expresado en una forma unificada y comprensible, y la aplicacin
puede escalar, puesto que no est bloqueada a un solo procesador de una sola mquina. Esta es la
belleza del estilo de programacin workflow.
Y esto no es todo, usando WF tiene adems otras ventajas. Puede hacer coordinar trabajo paralelo
fcilmente, por ejemplo, ayuda a rastrear el progreso de una aplicacin y mucho ms. La siguiente
seccin revisa estos aspectos de la tecnologa.

Otros Beneficios del estilo Workflow


Un workflow WF consiste de actividades ejecutadas por el runtime WF. Mientras que entender el
mundo WF lleva algun esfuerzo, escribir la logica de la aplicacin en este estilo hace que algunos
retos de programacin sean ms fciles, como se describe a continuacin.
Coordinacin de trabajo paralelo
La Biblioteca BAL incluye actividades que corresponden con proposiciones familiares de los lenguajes
de programacin convencionales. En razn a esto, usted puede escribir workflows que se comporten
muy similar a programas ordinarios. Ms an la presencia del runtime del WF tambin le permite crear
actividades que proporcionan ms que lo que proporciona un lenguaje de programacin convencional.
Un ejemplo importante de esto es el uso de workflow para facilitar la programacin de trabajo en
paralelo.
No Confundir: El enfoque aqu no es escribir cdigo paralelo que ejecute en un procesador multi-core.
Ms bien, piense en una aplicacin que necesita llamar a dos servicios web, y esperar por ambos
resultados antes de poder continuar. Ejecutar las actividades en paralelo es claramente ms rpido
que hacerlo secuencialmente, pero escribir cdigo tradicional que haga esto no es simple. Y mientras
el Framework .NET proporciona varios procedimientos para hacer estos llamados asncronamente,
ninguno de ellos es especialmente directo. Esta es otra situacin en la cual el estilo workflow puede
brillar. WF hace esto ms fcil Figura 7 muestra cmo.

13

Figura 7: Actividades contenidas dentro de una actividad en paralelo


ejecutan en paralelo.
Esta figura muestra un workflow simple que es muy similar al ejemplo anterior. La gran diferencia es
que ahora invoca dos servicios web, despus espera una respues de ambos para poder continuar.
Para ejecutar estos llamados en paralelo, el programador del workflow encapsula ambos pares de
actividades SendMessage y ReceiveMessage dentro de una actividad Parallel. Parallel es parte
de la biblioteca estandar de WF (Base Activity Library) , y hace exactamente lo que su nombre
sugiere: ejecuta las actividades que contiene en paralelo. En vez de retar al programador con la
complejidad de manejar esto, el runtime del WF y la actividad Parallel hacen el trabajo pesado. Todo
lo que el programador necesita hacer es arreglar las actividades conforme se necesiten para resolver
el problema.
Proporcionado Rastero Automtico
Puesto que el runtime WF puede ver los lmites entre actividades del workflow , sabe cundo cada una
de estas actividades inicia y termina. Sabiendo esto, proporcionar un rastreo automtico de la
ejecucin del workflow es directa. La Figura 8 ilustra esta idea.

14

Figura 8: El runtime WF runtime puede automticamente rastrear la


ejecucin de un workflow
Como muestra este ejemplo, el runtime WF puede escribir un registro de la ejecucin del workflow en
un almacenamiento de rastreo.Una opcin es registrar las actividades, escribiendo un registro cada
vez que una actividad inicia o termina su ejecucin. Al momento mostrado en la figura, por ejemplo, el
workflow est a punto de iniciar la ejecucin de la actividad If, y de esta forma el runtime WF est
escribiendo un evento indicando esta accin. Tambin es posible rastrear variables especficas, por
ejemplo estado del workflow, grabando sus valores a varios puntos en la ejecucin del workflow.
Como con otros aspectos de WF, esta caracterstica de registro automtico no requiere ningn trabajo
de parte del programador. El solamente debe indicar que el rastre deber suceder, y especficamente
indicar el nivel de rastreo en el que est interesado, el WF se encarga del resto.
Creando Actividades Personalizadas reutilizables
Las actividades de la biblioteca BAL proporcionan una variedad de funciones tiles. Como ya se
mostr, por ejemplo, este conjunto de actividades inter-construidas incluye actividades para el control
de flujo, enviar y recibir mensajes, hacer trabajo en paralelo, y ms. Pero construir una aplicacin real
usualmente requiere crear actividades que realicen tareas especficas.

15

Para hacer esto possible, WF permite crear actividades personalizadas. Por ejemplo , las actividades
etiquetadas X, Y, y Z en los workflows mostrados anteriormente son en efecto actividades
personalizadas, com o la Figura 9 lo hace explcito.

Figura 9: Actividades personalizadas permiten a un workflow realizar tareas


especficas de la aplicacin.
Las Actividades Personalizadas pueden ser simple, realizar solamente una tarea, o pueden ser tareas
compuestas conteniendo lgica compleja arbitraria. Y si son simples o complejas, las actividades
personalizadas pueden ser utilizadas en diferentes formas. Por ejemplo, una aplicacin empresarial
creada usando WF puede implementar lgica especfica de la aplicacin como una o ms actividades.
Alternativamente, un vendedor de Software usando WF puede proporcionar un conjunto de
actividades para hacer la vida de sus clientes ms fcil. Por ejemplo, Windows SharePoint Services
permite a los programadores crear aplicaciones basadas en WF que interactan con personas a
travs de listas estndar de Sharepoint. Para hacer esto ms fcil, Sharepoint incluye actividades
personalizadas para escribir informacin a una lista.
Las actividades personalizadas pueden ser escritas directamente en cdigo, usando C# o VisualBasic
u otro lenguaje. Ellas pueden tambin ser creadas combinando actividades existentes, las cuales
permiten opciones interesantes. Por ejemplo una organizacin puede crear actividades personalizadas

16

de bajo nivel para sus programadores ms hbiles, y posteriormente empaquetarlas en actividades de


alto nivel para que sus programadores menos tcnicos las utilicen. Estas actividades de alto nivel
pueden implementar cualquier lgica de negocio que sea requerida, todo elegantemente encapsulado
en una caja reutilizable.
Otra forma de pensar en esto es ver un conjunto de actividades ejecutadas por el runtime de WF como
un lenguaje. Si una organizacin crea un grupo de actividades personalizadas que pueden ser
reutilizadas para resolver problemas especficos a travs de mltiples aplicaciones, lo que estarn
realmente haciendo es una clase de lenguaje de dominio especifico (DSL). Una vez echo esto, puede
ser posible para personas menos tcnicas crear aplicaciones WF que usen esta funcionalidad pre
empacada en pequeos pedazos de cdigo personalizado. En vez de escribir nuevo cdigo para
implementar la funcin de las aplicaciones, y un nuevo software til puede ser creado solamente
ensamblando actividades existentes. Este estilo de DSL, definido en el estilo de los workflows, puede
significativamente mejorar la productividad en algunas situaciones.
Haciendo el Proceso Visible
Creando aplicaciones con lenguajes de programacin tradicionales significa escribir cdigo. Creando
aplicaciones con WF usualmente no es una actividad de bajo nivel. Por lo menos el control de flujo
principal puede ensamblarse grficamente. Para poder hacer esto, WF incluye un diseador grafico de
workflows que ejecuta dentro de Visual Studio. La Figura 10 muestra un ejemplo.

Figura 10: El Diseador de Workflows, ejecutando dentro de Visual Studio,


permite a los programadores crear un workflow simplemente arrastrando y
soltando actividades.

17

Como se muestra en el ejemplo, las actividades disponibles a un diseador de WF aparecen a la


izquierda. Para crear un workflow, el programador puede ensamblar estas actividades sobre la
superficie de diseo para crear la lgica de la aplicacin requiere. De ser necesario el diseador del
workflow WF grafico puede tambin hospedarse tambin en otros ambientes, permitiendo a otros usar
esta herramienta dentro de sus propias ofertas.
Para algunos programadores, este procedimiento grafico permite crear aplicaciones mas rpido y fcil.
Adems hace que la lgica de las aplicaciones ms visible. Proporcionando una imagen directa de lo
que el workflow hace, el diseador de WF grafico puede ayudara los diseadores a entender ms
rpidamente la estructura de la aplicacin. Esto puede ser especialmente til para gente que deber
dar mantenimiento a las aplicaciones implementadas, puesto que aprender una nueva aplicacin lo
suficientemente bien para cambiarla puede ser un proceso que consuma mucho tiempo..
Pero que hay de las Actividades Personalizadas? Se requiere an escribir cdigo?. La respuesta es
S, y asi WF tambin permite usar Visual Studio para crear actividades personalizadas in C#,
VisualBasic y otros lenguajes. Para dar un vistazo de como funciona, es importante entender vomo el
Diseando WF grafico representa las varias partes de un workflow. La Figura 11 muestra como
usualmente esto es hecho.

18

Figura 11: El estado de un Workflow y el control de flujo son tpicamente


descritos in XAML, mientras que las actividades personalizadas pueden ser
escritas en cdigo.
La composicin de un Workflow WF Las actividades que contiene y como estas actividades estn
relacionadas tpicamente es representado usando XAML (eXtensible Application Markup
Language). Como la Figura 11 muestra, XAML proporciona una forma basada en XML para describir
el estado del workflow con variables y expresar las relaciones entre las actividades del workflow. De
aqu, por ejemplo, el cdigo XAML para la actividad ms externa del workflow Sequence contiene una
actividad ReceiveMessage seguida de una actividad If , justo como se debera esperar.
Si la actividad If contiene las actividades personalizadas X y Y. En vez de estar creadas en XAML,
estas actividades son escritas como clases C#. Mientras que es posible crear algunas actividades
personalizadas solamente en XAML, lgica ms especializada se escribe directamente en cdigo. En
Efecto, aunque no es el procedimiento usual, un programador tiene la libertad de escribir un workflow
completamente en cdigo--- usar XAML no es estrictamente requerido.

Usando Windows Workflow Foundation: Algunos Escenarios

Entendiendo la mecnica de WF es una parte esencial de entender el estilo de workflows. Sin


embargo no es suficiente, Usted tambin necesita entender como el workflow puede ser utilizado en
aplicaciones. De acuerdo a esto, esta seccin comprende una Mirada arquitectnica del cmo y
porque WF puede ser utilizado en algunas situaciones tpicas.

Creando un Servicio de Workflow


Creando lgica de negocio como un servicio a menudo tiene sentido. Suponga, por ejemplo, que la
misma funcionalidad deber ser accesible desde un navegador web a travs de ASP.NET, desde un
cliente Silverlight, y desde una aplicacin de independiente de escritorio. Implementar esta lgica
como un conjunto de operaciones que pueden ser invocados desde cualquiera de estos clientes esto es como un servicio es considerado el mejor procemiento. Exponer la lgica como un servicio
tambin la hace accesible desde otra lgica, lo cual puede algunas veces hacer una integracin de
aplicacines ms fcil. (Esto es la idea central acerca de la nocion de SOA, arquitectura orientada a
servicios.)
Para los programadores .NET hoy, la tecnologa estrella para programar servicios es Windows
Communication Foundation (WCF). Entre otras cosas, WCF permite a los programadores
implementar logica de negocio que es accessible usando RESR, SOAP y otros estilos de
comunicacin. Y para algunos servicios , WCF puede ser todo lo que es necesario. Si usted esta
implementando un servicio donde cada operacin es independiente, por ejemplo cualqueir operacin
puede ser invocada a cualquier momento, sin un orden requerido escribir estos servicios como
servicios WCF crudos WCF es adecuado. El creador de un servicio cuyas operaciones solamente
exponen datos puden ser buenos candidatos pausar WCF, por ejemplo .
Para situaciones ms complejas, sin embargo , donde las operaciones en un servicio implementan un
conjunto de funcionalidad relacionada , WCF solo puede no ser suficiente. Piense en aplicaciones que

19

le permiten a un cliente reservar vuelos o realizar compras electrnicas, o realizar algn otro proceso
de negocio. En casos como estos, es mejor seleccionar WF para implementar la lgica del servicio.
Esta combinacin tiene un nombre: Lgica implementada usando WF y expuesta va WCF es
conocida como un servicio de workflow (workflow service). La Figura 12 ilustra esta idea.

Figura 12: Un Servico de workflow usa WCF para exponer lgica basada en
WF.
Como la figura muestra, WCF permite exponer uno o mas puntos de service (endpoints) que un cliente
puede invocar va SOAP, REST, o cualquier otro. Cuando un cliente llama la operacin inicial en este
servicio de ejemplo, la solicitud es manejada por la primera actividad ReceiveMessagedel workflow.
Si una actividad If sigue a continuacin, y cuyas actividades personalizadas incluidas sean
ejecutadas depende de del contenido de la solicitud del cliente. Cuando la actividad Ifes terminada,
una respuesta es regresada va la actividad SendMessage .La segunda peticin del cliente invocando
otra operacin es manejada de manera similar: Es aceptada por la actividad ReceiveMessage,
procesada por la lgica del workflow, y despus respondida usando la actividad SendMessage.
Porque es buena la idea de escribir lgica de negocio orientada a servicios? La respuesta es obvia:
Permite crear una aplicacin unificada y escalable. En vez de que cada aplicacin requiera una
verificacin ---Es legal invocarme ahora? Este conocimiento est embebido en la lgica misma del
workflow. Esto hace la aplicacin fcil de escribir e igual de importante, fcil de entender para

20

personas que eventualmente le darn mantenimiento. Y en vez de escribir su cdigo propio para
manejar escalabilidad y estado, el runtime de WF hace todo esto por usted.
Un servicio de Workflow adems de permitir todos los beneficios anteriores, como cualquier aplicacin
WF incluye lo siguiente:
Implemenatcin de servicios que hacen trabajo en paralelo es directo: solamente arrastre actividades
dentro de una actividad Parallel.
Rastreo del servicio es proporcionado por el runtime de WF.
Dependiendo del dominio del problema, es possible crear actividades personalizadas reutilizables para
usar en otros servicios.
El workflow puede ser creado grficamente, con la lgica de proceso visible directamente en el
diseador de workflows grfico.
Usando WF y WCF juntos creando servicios de workflow nunca fu tan fcil en otras versiones
de WF. Con NET Framework 4, la combinacin de esta tecnologa viene integrada de una manera
ms natural. La meta de crear lgica de negocio en este estilo es lo ms simple posible.

Ejecutando un servicio de Workflow dentro de Dublin


Un gran punto con el estilo de workflows no ha sido discutido an : Donde ejecutan estos?. El WF
runtime es una clase, como lo son las actividades. Todas estas debern ejecutar en algn proceso que
las hospeda, pero cual proceso es este?
La respuesta es que un workflow WF puede ejecutar en casi cualquier proceso. Usted ahora es libre
de crear su propio proceso de hospedaje, incluso reemplazar algunos de los servicios bsicos de WF
(por ejemplo persistencia) si usted asi lo quiere. Muchas organizaciones lo han hecho asi,
especialmente vendedores de software. Ms an construir procesos totalmente funcionales para WF,
complementado con capacidades de administracin, no es lo ms sencillo del mundo. Y para
organizaciones que quieren gastar dinero construyendo lgica de negocio en vez de infraestructura,
evitando este esfuerzo hace sentido.
Una opcin simple es hospedar un workflow en un proceso de trabajo proporcionado por Internet
Information Server (IIS). Aunque esto funciona, es solamente una function de bajo nivel. Para hacer la
vida ms fcil a los programadores, Microsoft est proporcionando la tecnologa denominada Dublin.
Implementada como extensiones a IIS y a Windows Process Activation Service (WAS), la meta
principal de Dublin es hacer IIS y WAS ms atractivo como un servicio de hospedaje de servicios de
workflow. La Figure 13 muestra como un servicio de workflow se ve cuando ejecuta en un ambiente de
Dublin.

21

Figura 13: "Dublin" proporciona administracin y ms servicios para los


servicios de workflow.
Mientras que WF por si mismo incluye mecanismos para persistencia del estado de un workflow ,
rastreo y ms, solamente proporciona lo bsico. Dublin construido sobre soporte de los intrinsecos de
WF ofrece un ambiente ms til y administrable. Por ejemplo, junto con un almacenamiento
persistente y rastreo basado en SQL Server, Dublin proporciona una herramienta de administracin
para trabajar con estos almacenamientos. Esta herramienta, implementada comoe xtensiones al IIS
manager, permite a los usuarios examinar y administrar (por ejemplo terminar) workflows
almacenados en rea persistente, controlar cuanto rastreo se requiere, examinar las bitcoras de
rastreo y ms.
Adems de las adiciones a la funcionalidad existente de WF, Dublin tambin agrega otros servicios.
Por ejemplo, Dublin puede monitorear instancias de workflows, automticamente, reiniciar cualquier
workflow que fall. El objetivo principal de Dublin de Microsofts es claro: Proporcionar un conjunto
de herramientas e infraestructura para administrar y monitorear servicios de workflow hospedados en
IIS/WAS.

Usando Servicios de Workflow en una aplicacin ASP.NET


Es probablemente seguro decir que la mayora de aplicaciones .NET usan ASP.NET. Una vez
habiendo hecho el estilo de programacin de workflows el estilo principal, es atractivo para los
programadores ASP.NET poner el WF en esta plataforma.

22

En versions anteriores de WF, el desempeo de workflows no fue lo suficientemente bueno, para un


significativo nmero de aplicaciones ASP.NET. Para la versin .NET Framework 4 , sin embargo, Los
diseadores de WF hicieiron reaquitectura de importantes partes de la tecnologa, mejorando el
desempeo significativamente. Esta version , junto con el advenimiento de Dublin, hace que las
aplicaciones basadas en WFparticularmente servicios de workflow una opcin ms viable para
programadores ASP.NET. La Figure 14 muestra una imagen de como se ve esto.

Figura 14: Lgica de Negocio en una aplicacin ASP.NET puede ser


implementada como un servicio de workflow.
En este escenario, las pginas ASP implementan solamente la interface de usuario. Su lgica es
implementada enteramente en el servicio de workflow. Para el servicio de workflow, la aplicacin
ASP.NET es solamente otro cliente, mientras que para la aplicacin ASP.NET, el servicio de workflow
se ve como otro servicio. No necesita saber que este servicio esta implementado usando WF y WCF.
Una vez ms, la Pregunta es, Porque hacer esto? Porque no escribir la logica de la aplicacin en
ASP.NET de la forma usual? Porque una solucin WF/WFC? En este punto, muchas de las
respuestas a estas preguntas son probablemente obvias, pero vale la pena reitralas:
En vez de esparcir la lgica de la aplicacin en mltiples paginas ASP.NET, la lgica puede ser
implementada dentro de un simple workflow unificado. Especialmente para grandes sitios, esto puede
hacer la aplicacin significativamente ms fcil de construir y mantener.
En vez de trabajar explicitamente con el estado en la aplicacion ASP.NET, quiza utilizando el objeto de
session o algun otro, el programador puede confiar en el runtime del WF para hacer esto. La aplicacin
ASP.NET necesita solamente mantener rastro de un identificador de instancia para cada instancia de
workflow (principalmente una por usuario), tal como almacenarla en un cookie. Cuando la aplicacin
suministra este identificador a Dublin , la instancia de workflow sera automticamente recargada.
Despues ejecutada justo donde quedo suspendida con todo su estado reestablecido.
Otros beneficios de WF tambin aplican, incluyendo paralelismo sencillo, rastreo inter-construido,
potencial para reusar actividades, y la habilidad de visualizar la lgica de la aplicacin.

23

Debido a que un servicio de workflow no est atado a un proceso especfico sobre una maquina
especfica, puede ser cargado y balanceado a travs de mltiples instancias de Dublin. La Figura 15
muestra un ejemplo de como esto podra verse.

Figura 15: Una aplicacin ASP.NET replicada puede usar mltiples


instancias para ejecutar un servicio de workflow
En este scenario simple, las pginas ASP.NET de una aplicacin son replicadas a travs de tres
servidores IIS. Mientras que estas pginas manejan interaccin con los usuarios, la lgica de negocio
es implementada como un servicio de workflow dentro de Dublin. Dos instancias del ambiente de
Dublin estn ejecutando, cada una en su propia mquina, Cuando la primera peticin viene de un
usuario , un balancedor de carga rutea la peticin a la instancia superior de IIS. La pagina ASP.NET
que maneja esta solicitud llama una operacin en el servicio de workflowque implementa el pedazo
lgica de negocio.. Esto causa que el workflow WF comience la ejecucin en la instancia de Dublin
sobre la mquina de ms arriba en la Figura . Una vez que las actividades relevantes en este workflow
han sido completadas, el llamado retorna a la pagina ASP.NET, y el workflow es guardado en
almacenamiento persistente.
La segunda peticin del usuario es ruteada a una instancia diferente de IIS. La pagina ASP.NETen
esta mquina, en turno, invoca una operacin en el workflow (que esta en estado persistente) sobre
una maquina distinta a la que manejo la primera peticin. Esto no es un problema: Dublin solamente
carga la instancia del workflow del almacenamiento persistente que comparte con sus servidor
asociado. Este servicio de workflow recargado entonces maneja la peticin del usuario, inicindolo
desde donde quedo detenido.
Entendiendo WF (y WCF), despus entendiendo como crear la lgica de un workflow en este Nuevo
estilo de programacin lleva algn tiempo. Para una aplicacin ASP.NET simple, subir por esta curva
de aprendizaje quiz no page el esfuerzo requerido. Pero, sin embargo, para alguien que cree grandes
aplicaciones ASP.NET deber por lo menos considerar la posibilidad de crear su lgica como un
servicio de workflow.

24

Usando Workflows en Aplicaciones Cliente


El enfoque hasta aqu ha sido enteramente en usar WF para crear aplicaciones de servidor, Esto es
como esta tecnologa es utilizada hoy en da, WF puede tambin ser til para aplicaciones cliente. Sus
aspectos de escalabilidad no agregan tpicamente mucho en este caso, puesto que el cdigo que
ejecuta en la computadora del cliente no necesita manejar muchos usuarios simultneamente, pero
WF puede an ser de bastante uso.
Por ejemplo, piense en una aplicacin cliente que representa a su usuario con una interfase grfica
creada utilizando Windows Forms o Windows Presentation Foundation. La aplicacin probablemente
tendr manejadores de eventos para procesar los clicks del ratn del usuario, quiz esparciendo su
lgica a travs de estos manejadores de eventos. Esto es muy parecido a una aplicacin ASP.NET
esparciendo su lgica a travs de un grupo de pginas distintas, y puede significar los mismos retos.
El flujo de la aplicacin puede ser dificil de discernir , por ejemplo, y el programador puede necesitar
inserter verificaciones para asegurarse que las cosas son realizadas en el orden correcto. Lo mismo
que con la aplicacin ASP.NET, implementando esta lgica como un workflow WF unificado puede
ayudar a direccionar estas inconveniencias.
Otros aspectos de WF pueden tambin ser tiles en el cliente. Suponga que la aplicacin invoca
mltiples servicios web en paralelo, por ejemplo, o pueda ser beneficiada de las operaciones de
rastreo. Al igual que como en el caso de servidor, WF puede ayudar a facilitar estos retos. Mientras
que la mayora de las aplicaciones WF hoy ejecutan en servidores, es importante reconocer que esto
no es la nica opcin.

Una Mirada Interna: La Tecnologa de Windows Workflow Foundation


La meta de esta revisin no es hacerlo un programador WF, sin embargo, conociendo un poco ms de
la tecnologa de WF puede ayudar a decidir cuando tiene sentido elegir el estilo de workflows. De
acuerdo con esto esta seccin le da una mirada a algunas de las partes importantes de WF.

Tipos de Workflows
En el .NET Framework 4, los programadores de WF tpicamente eligen entre dos diferentes estilos de
workflow eligiendo diferentes actividades como la ms externa, estas Actividades son:
Sequence: Ejecuta actividades en secuencia una despus de la otra. Estas secuencias pueden
contener actividades If , actividades While ,y cualquier otra clase de control de flujo. Sin embargo, no
es posible regresar hacia atrs. La ejecucin siempre debe ir hacia adelante
Flowchart: Las Actividades ejecutan una despus de otra, como en la actividad Sequence, pero se
permite regresar el control a una actividad anterior. Este procedimiento ms flexible, es nuevo en la
version de .NET Framework 4, y es ms parecido a como un proceso real funciona y a la forma en que
muchos de nosotros pensamos.

25

Mientras que Sequence y Flowchart pueden actuar como actividades ms externas de un workflow,
tambin pueden ser utilizadas dentro de un workflow. Esto permite que estas actividades compuestas
sean anidadas en forma arbitraria.
En sus primeras dos versiones, WF tambin incluyo otra opcin de actividad ms externa para un
workflow llamada StateMachine. Como su nombre sugiere, esta actividad permite a un programador
explcitamente crear una mquina de estados, permitiendo que eventos externos disparen actividades
dentro de esta mquina de estados. WF en el .NET Framework 4 es un gran cambio, sin embargo, es
un cambio que requiere reescribir la mayora de actividades de versiones anteriores y construir un
nuevo diseador grfico. Debido al esfuerzo involucrado, los creadores de WFno estn distribuyendo
la actividad State Machine con la versin inicial de.NET Framework 4. Pero a pesar de esto, los
recursos de Microsofts no estn limitados, la nueva actividad Flowchart deber poder resolver
muchas de las situaciones que anteriormente requirieron de la actividad State Machine.

La Biblioteca de Actividades Base


Un workflow puede contener cualquier conjunto de actividades de las cuales un programador puede
elegir. Por ejemplo, es completamente legal, para un workflow no contener nada ms que actividades
personalizadas, Aunque este caso, no es muy comn. La mayora de las veces un workflow WF utiliza
al menos algunas de las actividades proporcionadas por WF en su BAL. Entre las actividades del BAL
mas utilizadas tenemos:
Assign: asignar un valor a una variable en el workflow.
Compensate: proporciona una forma de compensacin, tal como manejar un problema que ocurri en
una transaccin de larga duracin.
DoWhile: ejecuta una actividad, y despus verifica una condicin. La actividad deber ser ejecutada
siempre y cuando la condicin sea verdadera (true)
Flowchart: agrupa un conjunto de actividades que son ejecutadas secuencialmente, pero tambien
permite control para regresar a una actividad previa.
ForEach: ejecuta una actividad para cada objeto dentro de una coleccin
If: crea una ramificacin de la ejecucin.
Parallel: ejecuta multiples actividades al mismo tiempo.
Persist: explcitamente solicita al runtime del WF que almacene el estado del workflow.
Pick: Permite la espera de un conjunto de eventos, y despues ejecuta solamente la actividad asociada
con el primer evento ocurrido.
ReceiveMessage: recive un mensaje a traves de WCF.
SendMessage: envia un mensaje a traves de WCF.

26

Sequence: Agrupa un conjunto de actividades que son ejecutadas secuencialmente. Aparte de actuar
como una actividad mas externa de un workflow, Sequence es tambien tila dentro de workflows. Por
ejemplo una actividad While puede contener solamente una actividad. Si esa actividad es la actividad
Sequence, un programador puede ejecutar un numero arbitrario de actividades dentro de un ciclo
Switch: proporciona una forma de multi-bifurcacin de la ejecucin
Throw: Dispara una excepcin (Exception).
TryCatch: permite crear bloques try/catch para manejar excepciones (exceptions.)
While: ejecuta una sola actividad de manera indefinida siempre que la condicin sea verdadera (true)
Esta no es la lista completa de actividades deWF. .NET Framework 4 incluye ms actividades.
Adems, Microsoft tiene previsto realizar nuevas actividades WF disponibles en el portal CodePlex, el
sitio de alojamiento de proyectos de cdigo abierto. Por ejemplo despus de la liberacin de NET
Framework. 4, agrega actividades que permiten a los workflows consultas de base de datos y
actualizaciones, ejecucin de comandos de PowerShell, y ms.
Como esta lista indica, el BAL en gran medida reflejo la funcionalidad de un lenguaje de programacin
tradicional y de propsito general. Esto no debe sorprender, ya que WF est destinado a ser una
tecnologa de uso general. Sin embargo , como en este panorama se ha descrito, el enfoque que se
necesita de Actividades ejecutadas por el runtime de WF,a veces puede hacer la vida mejor para los
programadores de aplicaciones.

Workflow en .NET Framework 4


Versin 4 de. NET Framework trae cambios significativos en Windows Workflow Foundation. Las
actividades en el BAL se han reescrito , por ejemplo, y algunas nuevas se han agregado . Esto trae
beneficios reales, muchos flujos de trabajo ahora se ejecutan mucho ms rpido, por ejemplo-, pero
tambin significa que los flujos de trabajo creados con versiones anteriores de WF no se puede
ejecutar en la versin runtime WF del .NET 4 . Sin embargo ,Estos flujos de trabajo anteriores todava
pueden correr en . NET Framework 4 cambios, no tienen por qu ser desechados . Adems, las
actividades creadas con versiones anteriores de WF , incluyendo flujos de trabajo completos , se
puede ejecutar potencialmente dentro de una nueva actividad Interop que WF de. NET Framework 4
proporciona . Esto permite que la lgica de los flujos de trabajo de versiones anteriores se puede
utilizar en versiones nuevas.
Junto con un mejor rendimiento, esta nueva versin de WF tambin trae otros cambios interesantes.
Por ejemplo , las versiones anteriores de WF incluyen una actividad de cdigo que podran contener
cdigo arbitrario. Esto permitio a un programador aadir casi cualquier funcionalidad deseada para un
flujo de trabajo , pero era una solucin poco elegante. En el . NET Framework 4 , los creadores de WF
hicieron posible la escritura de actividades personalizadas mucho ms sencilla , por lo que la actividad
Code se ha eliminado. La nueva funcionalidad ya est invluida como una actividad personalizada .
Los cambios en Framework . NET 4 son los ms importantes desde el aspecto original de WF en
2006. Sin embargo ,todos ellos tienen el mismo objetivo ,: hacen ms fcil la vida de los
programadores al crear aplicaciones eficientes utilizando flujos de trabajo.

27

Conclusion
Windows Workflow Foundation ofrece ventajas reales para muchas aplicaciones. Es sus primeras
versions WF choco con muchos vendedores de software. Estas inconvemniencias de la tecnologa
fueron tiles, pero no fueron realmente apropiadas para su uso principal en aplicaciones
empresariales, con la versin de NET Framework 4 los creadores de WF estn cambiando esto.
Haciendo que WF y WCF trabajen en conjunto, mejorando el desempeo de WF, proporcionado
diseador grafico y ofreciendo grandes beneficio de hospedar WF con Dublin, Microsoft esta
haciendo que el estilo de programacin de workflows ms atractivo para un amplio rango de
escenarios. Sus das como jugador especializado en el drama de desarrollo de aplicaciones de
Windows estn llegando a su fin. WF est en camino al centro del escenario.

Acerca del Autor


David Chappell is Director de Chappell & Associates (www.davidchappell.com) en San Francisco,
California. A Travs de sus Charlas, escritos y consultora, ayuda a las personas de todo el mundo a
entender, usar y hacer mejores decisiones acerca de nuevas tecnologas.

28

Das könnte Ihnen auch gefallen