Windows Workflow Foundation Lagash Systems Jorge Fioranelli [email protected] Agenda • Día 1 (16/11) • Día 2 (17/11) • Día 3 (23/11) – Introduction – Parameters – Conditions –

Download Report

Transcript Windows Workflow Foundation Lagash Systems Jorge Fioranelli [email protected] Agenda • Día 1 (16/11) • Día 2 (17/11) • Día 3 (23/11) – Introduction – Parameters – Conditions –

Windows Workflow Foundation
Lagash Systems
Jorge Fioranelli
[email protected]
Agenda
• Día 1 (16/11) • Día 2 (17/11) • Día 3 (23/11)
– Introduction
– Parameters
– Conditions
– Persistence
– WebServices
– LocalServices
– Errors
– FaultHandlers
– Transactions
– Compensation
– Compensation
+ Transaction
– Parallel
– WCF
– Tracking
– Custom Activities
– WF v4 Overview
– Preguntas
Día 1
Agenda
•
•
•
•
•
•
Introduction
Parameters
Conditions
Persistence
WebServices
LocalServices
Introducción
¿Qué es un Workflow?
• Es el modelo de un proceso el cuál es definido
como un mapa de actividades.
• Una actividad es un paso dentro del workflow.
• Las actividades son la unidad de ejecución,
reúso y composición para el workflow
Introducción
Introducción
¿Cuándo usar un Workflow?
• Procesos que deben adaptarse con facilidad y
rapidez.
• Procesos que deben ser adaptados por
personas sin conocimientos técnicos.
• Procesos que orquestan distintos sistemas o
partes del mismo sistema.
Introducción
Versiones
• v3.0: Versión Inicial
• v3.5: Agrega nuevas entidades a la v3.0
• v4.0: Nueva versión (actualmente en beta 2)
Introducción
Arquitectura
Visual Designer
A Workflow
An Activity
Custom Activity Library
Windows
Workflow Foundation
Base Activity Library
Runtime Engine
Runtime Services
Host Process
Demo
Hello World, Parameters
y Conditions
Persistence
Persistence
• Servicio a través del cual el runtime provee la
capacidad de persistencia.
• WF runtime: cuándo, PersistenceService: cómo
y dónde.
• Propiedad UnloadOnIdle del servicio: permite
pasivar automáticamente una instancia
inactiva.
• Clase base: WorkflowPersistenceService
• Implementación provista por WF:
SqlWorkflowPersistenceService
Demo
Persistence
WebServices
WebServices
• WF puede consumir WebServices
Workflow
• WF puede exponerse como WebService
Workflow
WebServices
• InvokeWebService
– Permite invocar un WebMethod
• WebServiceInput
– Permite al workflow ser accedido como un WS
• WebServiceOutput
– Permite devolver la respuesta como un WS
• WebServiceFault
– Permite devolver un error como un WS
WebServices
Consumir un WebService
•
•
•
•
•
Colocar una actividad InvokeWebService
Configurar la URL del WebService
Seleccionar el WebMethod a invocar
Automáticamente se genera el proxy
Mapear los parámetros de entrada y salida
WebServices
Exponer un WebService
•
•
•
•
•
•
•
Construir la interfaz que debe exponer el WS
Colocar una actividad WebServiceInput
Seleccionar la interfaz y el método expuesto
Mapear los parámetros de entrada
Colocar una actividad WebServiceOutput
Mapear el valor de retorno
Publicar el workflow como WebService
Demo
WebServices
LocalServices
LocalServices
• La aplicación debe exponer
– Metodos
– Eventos
• WF los utiliza a través de sus actividades
Application
Workflow
Event
Event
ExternalDataExchangeService
Method
Method
Interfaz
LocalServices
• Define el contrato de comunicación entre la
aplicación y WF
• Debe estar decorada con [ExternalDataExchange]
• Los argumentos deben heredar de
ExternalDataEventArgs
[ExternalDataExchange]
public interface IOrderManager
{
// Create a workflow instance to process the order
event EventHandler<OrderEventArgs> OrderSubmitted;
// The workflow instance will later call one of these methods
void Approve(string orderId);
void Reject(string orderId);
}
LocalServices
Implementación
• Un objeto de la aplicación debe implementar
la interfaz
• Será el responsable de interactuar con WF
public class OrderManager : IOrderManager
{
// Create a workflow instance to process the order
public event EventHandler<OrderEventArgs> OrderSubmitted;
// The workflow instance will later call one of these methods
public void Approve(string orderId) { … }
public void Reject(string orderId) { … }
}
Registración
LocalServices
• El servicio ExternalDataExchangeService encapsula al
objeto de la aplicación.
• Luego se agrega este servicio al runtime de
WF.
• El servicio se comparte para todas las
instancias de workflow.
WorkflowRuntime runtime = new WorkflowRuntime();
ExternalDataExchangeService dataService = new ExternalDataExchangeService();
runtime.AddService(dataService);
dataService.AddService(new OrderManager());
LocalServices
Application
IOrderManager
Workflow
OrderManager
Event
Event
ExternalDataExchangeService
Method
Method
Demo
LocalServices
¿Preguntas?
Día 2
Agenda
•
•
•
•
•
Errors
FaultHandlers
Transactions
Compensation
Compensation
+ Transaction
Errors
Errors
• La exceptions pueden ser arrojadas desde:
– Código
– Throw Activity
• Se manejan con la FaultHandler Activity
• Si no son manejadas:
– Se interrumpe la ejecución del Workflow
– Se arroja el evento WorkflowTerminated
FaultHandlers
Errors
• En la sección de Workflow Exceptions, agregar
una FaultHandler Activity.
• Debe agregarse una por cada tipo de
excepción a manejar.
• Hay globales o por
grupo de actividades.
• Se evalúan de izquierda a
derecha.
Demo
Errors and
FaultHandlers
Transactions
Transactions
• Alineadas con System.Transactions.
• Utiliza el MSDTC cuando es requerido.
• Al finalizar fuerza un “persistence point”
dentro de la transacción.
• Necesita del PersistenceService.
• No utilizar en procesos de “larga duración”.
Transactions
TransactionScope
• Agrupa entidades que deben participar de una
misma transacción.
• Parámetros adicionales:
– Timeout
– Isolation Level
• Al finalizar persiste el workflow.
Demo
Transactions
Compensation
Compensation
• Se utiliza en escenario de “larga duración” o
cuando los sistemas no son transaccionales.
• Las actividades deben implementar la interfaz
ICompensatableActivity.
• Se ejecutará el método Compensate cuando:
– Se produzca una excepción no manejada.
– Se ejecute una la actividad Compensate .
Compensation
CompensatableActivity
• Implementa ICompensatableActivity.
• Posee una sección de compensación.
• Permite colocar
actividades encargadas
de realizar la
compensación.
Demo
Compensation
Compensation + Transation
Compensation
CompensatableTransactionScope
• Agrega la funcionalidad de compensación al
TransactionScope.
• Muy útil para procesos
de larga duración que
poseen transacciones
anidadas.
¿Preguntas?
Día 3
Agenda
•
•
•
•
•
•
Parallel
WCF
Tracking
Custom Activities
WF v4 Overview
Preguntas
Parallel
Parallel Activity
• Permite ejecutar pasos de distintas ramas de
manera intercalada.
• Todas las ramas se ejecutan en el mismo hilo.
• Útil cuando se espera una respuesta externa y
mientras se pueden avanzar con otros pasos.
Demo
Parallel
WCF
WCF
• Se agregó soporte a WCF en la versión 3.5.
• Nuevas actividades:
– ReceiveActivity
– SendActivity
• Host de WCF “WorkflowServiceHost”
• Requiere el uso de los siguientes bindings:
– basicHttpContextBinding
– wsHttpContextBinding
Demo
WCF
Tracking
Tracking
WF Runtime
PersistenceService
TrackingService
SchedulerService
TransactionService
SQL
Tracking
• Provee un mecanismo extensible de trace.
• El WF envía eventos y el Tracking Service
decide los datos que desea obtener.
• Permite insertar y obtener el trace desde un
Sql Server.
• Útil tanto para administradores como para
analistas.
• Maneja partitioning de tablas.
Tracking
• El Profile determina qué eventos debe
escuchar.
• El Channel envía los datos.
Tracking
• Correr los scripts de BD
(C:\Windows\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\EN)
• Instanciar el SqlTrackingService
• Agregar el servicio al WF Runtime
• Configurar el Tracking Profile
private void RunWorkflow()
{
WorkflowRuntime wr = new WorkflowRuntime();
string connectionstring = "Initial Catalog=Tracking;Data
Source=localhost;Integrated Security=SSPI;";
//Out of the Box Tracking Service
wr.AddService(new SqlTrackingService(connectionstring));
wr.CreateWorkflow(typeof(SimpleWorkflow)).Start();
}
Tracking
• Ejemplo de Profile
<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<TrackingProfile xmlns="http://schemas.microsoft.com/winfx/2006/workflow/trackingprofile"
version="1.0.0.0">
<TrackPoints>
<ActivityTrackPoint>
<MatchingLocations>
<ActivityTrackingLocation>
<Activity>
<Type>System.Workflow.Activities.CodeActivity,
System.Workflow.Activities, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35</Type>
<MatchDerivedTypes>false</MatchDerivedTypes>
</Activity>
<ExecutionStatusEvents>
<ExecutionStatus>Initialized</ExecutionStatus>
<ExecutionStatus>Executing</ExecutionStatus>
<ExecutionStatus>Closed</ExecutionStatus>
</ExecutionStatusEvents>
</ActivityTrackingLocation>
</MatchingLocations>
</ActivityTrackPoint>
</TrackPoints>
</TrackingProfile>
Demo
Tracking
Custom Activities
Custom Activities
Base Activity
Library
Custom Activity
Libraries
Domain-Specific
Workflow Packages
Compliance
Compose
activities
Out-of-Box
Activities
OOB activities,
workflow types,
base types
General-purpose
Activity libraries define workflow
constructs
Author new
activity
Create/Extend/
Compose activities
App-specific
building blocks
First-class citizens
CRM
Extend
activity
RosettaNet
Amazon
Vertical-specific
activities & workflows
Best-practice IP &
Knowledge
Custom Activities
• Modos de extensión:
• Composición
• Contenedor de otras actividades
• Heredan de CompositeActivity
• Herencia
• Actividad básica
• Heredan de Activity
• Puede construirse su propio diseñador (atributo
“Designer”)
• Puede construirse su propio validador
Demo
Custom Activities
Overview WF v4
Overview WF v4
• Reescribieron el motor completo
• Incompatible con la versiones 3.0 y 3.5
• .Net v4 va a venir con los dos motores (v3.5 y
v4.0).
• Mejor soporte para WCF y Performance
• Recursos:
– http://microsoftpdc.com/Sessions/FT17
– http://microsoftpdc.com/Sessions/P09-22
– http://microsoftpdc.com/Sessions/FT14
Demo
WF v4
Preguntas Realizadas
• Cómo utilizar seguridad?
– Propiedad “roles”
– Proveedor de membership de asp.net
• Cuando se persiste el workflow?
–
–
–
–
–
Cuando se encuentra en estado “idle”.
Cuando finaliza.
Cuando una TransactionScopeActivity finaliza
Cuando una CompensatableSequenceActivity finaliza.
Cuando finaliza una custom activity decorada con
“PersistOnCloseAttribute “.
– Cuando se invoca al método Unload del
WorkflowInstance.
Preguntas Realizadas
• Cómo se versionan los workflows?
– Assemblies con StrongName
– Proving Paths en el app.config
– GAC
• CompensatableSequenceActivity fuerza
persistencia?
– Si.
Muchas Gracias
Jorge Fioranelli
[email protected]
Rodolfo Finochietti
[email protected]