Continuando con esta serie de post acerca de Workflow Foundation, esta semana vamos a conversar acerca del manejo del hosting cuando utilizamos esta tecnología. Como recordarán en el post anterior, en ambos casos creamos una instancia del workflow utilizando una aplicación de consola, tal y como se puede apreciar en la siguiente imagen.
Al ser WF4 parte del framework de .NET se permite “hostear” y ejecutar un workflow en cualquier tipo de aplicación que este ejecutando el Framework de .NET – en este caso el 4.0. Podemos hostear un workflow como un servicio en WCF, en una aplicación ASP.NET, en una aplicación de consola, etc. Algo que siempre debemos considerar es que los workflows deben de ser independientes de el ambiente que los hostea, esto con el fin de permitir que estos puedan ser ejecutados e invocados desde cualquier tipo de consumidor.
El método Invoke de la clase WorfklowInvoker lo que haces es crear un workflow de manera sincrónica y retorna un diccionario de valores los cuáles representan los valores de retorno del workflow. Es importante destacar que la ejecución del workflow esta garantizada en el thread que lo invoca.
Si vemos la definición del método en el msdn, podemos ver que existen muchas versiones sobre cargadas del método; sin embargo, nosotros estamos utilizando la versión que recibe una actividad:
Y entonces surge la pregunta ¿No estamos enviando un workflow como parámetro? ¿ Porqué estamos utilizando una función que recibe una actividad? En realidad este es un concepto muy importante y es algo que tenemos que tener muy presente cuando utilizamos WF4. En WF4 los workflows son actividades que contienen otras actividades y por lo tanto cuando inicio un workflow utilizo la función que recibe una clase de tipo Activity, y dado que los workflows heredan de la clase Activity y gracias al polimorfismo, podemos enviar nuestro workflow como parámetro para este método.
Si vemos el código XAML del workflow que creamos en el ejemplo anterior – los workflows en WF4 son XAML – veremos que el nombre del workflow esta definido a través de la palabra reservada x:Class y para este caso el nombre del tipo es Workflow1 – para ver un workflow en xaml le damos botón derecho sobre el archivo y seleccionamos la opción ViewCode.
No hay comentarios:
Publicar un comentario