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 ReportTranscript 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]