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) en .NET Framework 4.5 presenta muchas características nuevas, como nuevas actividades, funcionalidades del diseñador y modelos de desarrollo de flujos de trabajo. Muchas, pero no todas, de las nuevas características de flujo de trabajo introducidas en .NET Framework 4.5 se admiten en el diseñador de flujos de trabajo rehospedado. Para obtener más información sobre las nuevas características compatibles, consulte Compatibilidad con nuevas características de Workflow Foundation 4.5 en el Diseñador de flujos de trabajo rehospedados. Para obtener más información sobre cómo migrar aplicaciones de flujo de trabajo de .NET Framework 3.0 y .NET Framework 3.5 para usar la versión más reciente, consulte Guía de migración. En este artículo se proporciona información general sobre las nuevas características de flujo de trabajo introducidas en .NET Framework 4.5.
Advertencia
Las nuevas características de Windows Workflow Foundation introducidas en .NET Framework 4.5 no están disponibles para los proyectos que tienen como destino versiones anteriores del marco. Si un proyecto destinado a .NET Framework 4.5 se vuelve a destinar a una versión anterior del marco, pueden producirse varios problemas.
- Las expresiones de C# se reemplazarán en el diseñador por el mensaje Value se estableció en XAML.
- Se producirán muchos errores de compilación, incluido el siguiente error.
El formato de archivo no es compatible con el marco de destino actual. Para convertir el formato de archivo, guarde explícitamente el archivo. Este mensaje de error desaparecerá después de guardar el archivo y volver a abrir el diseñador.
Control de versiones de flujo de trabajo
.NET Framework 4.5 introdujo varias características de control de versiones nuevas basadas en la nueva WorkflowIdentity clase. WorkflowIdentity proporciona a los autores de aplicaciones de flujo de trabajo un mecanismo para asignar una instancia de flujo de trabajo persistente con su definición.
Los desarrolladores que usan WorkflowApplication hospedaje pueden usar WorkflowIdentity para habilitar el hospedaje de varias versiones de un flujo de trabajo en paralelo. Las instancias de flujo de trabajo persistentes se pueden cargar mediante la clase nueva WorkflowApplicationInstance, y a continuación, el host puede usar DefinitionIdentity para proporcionar la versión correcta de la definición de flujo de trabajo al crear instancias de WorkflowApplication. Para obtener más información, consulte Uso de WorkflowIdentity y Versionado y Cómo hospedar múltiples versiones de un flujo de trabajo de manera concurrente.
WorkflowServiceHost ahora es un host de varias versiones. Cuando se implementa una nueva versión de un servicio de flujo de trabajo, se crean nuevas instancias mediante el nuevo servicio, pero las instancias existentes se completan con la versión anterior. Para obtener más información, consulte Control de versiones en paralelo en WorkflowServiceHost.
Se introduce una actualización dinámica que proporciona un mecanismo para actualizar la definición de una instancia de flujo de trabajo persistente. Para obtener más información, vea Actualización dinámica y Cómo: Actualizar la definición de una instancia de flujo de trabajo en ejecución.
Se proporciona un script de base de datos SqlWorkflowInstanceStoreSchemaUpgrade.sql para actualizar las bases de datos de persistencia creadas mediante los scripts de base de datos de .NET Framework 4. Este script actualiza las bases de datos de persistencia de .NET Framework 4 para admitir las nuevas funcionalidades de control de versiones introducidas en .NET Framework 4.5. Las instancias de flujo de trabajo persistentes de la base de datos reciben valores de control de versiones predeterminados y pueden participar en la ejecución en paralelo y la actualización dinámica. Para más información, consulte Actualizar las bases de datos de persistencia de .NET Framework 4 para admitir el control de versiones de flujo de trabajo.
Actividades
La biblioteca de actividades integrada contiene nuevas actividades y nuevas características para las actividades existentes.
Ámbito de NoPersist
NoPersistScope es una nueva actividad de contenedor que impide que un flujo de trabajo se conserve cuando se ejecutan las actividades secundarias de NoPersistScope. Esto es útil en escenarios en los que no es adecuado que el flujo de trabajo se conserve, como cuando el flujo de trabajo usa recursos específicos de la máquina, como identificadores de archivos, o durante las transacciones de base de datos. Anteriormente, para evitar que se produjera persistencia durante la ejecución de una actividad, se requería un NativeActivity personalizado que utilizara un NoPersistHandle.
Nuevas funcionalidades del diagrama de flujo
Los diagramas de flujo se actualizan para .NET Framework 4.5 y tienen las siguientes nuevas funcionalidades:
La propiedad
DisplayNamede una actividad FlowSwitch<T> o FlowDecision es editable. Esto permitirá que el diseñador de actividades muestre más información sobre el propósito de la actividad.Los diagramas de flujo tienen una nueva propiedad denominada ValidateUnconnectedNodes; el valor predeterminado de esta propiedad es
False. Si esta propiedad se establece enTrue, los nodos de diagrama de flujo no conectados producirán errores de validación.
Soporte para confianza parcial
Los flujos de trabajo de .NET Framework 4 requieren un dominio de aplicación de plena confianza. En .NET Framework 4.5, los flujos de trabajo pueden funcionar en un entorno de confianza parcial. En un entorno de confianza parcial, se pueden usar componentes de terceros sin concederles acceso total a los recursos del host. Algunas preocupaciones sobre la ejecución de flujos de trabajo en confianza parcial son las siguientes:
El uso de componentes heredados, incluidas las reglas, contenidos en la Interop actividad no es compatible bajo confianza parcial.
No se admite la ejecución de flujos de trabajo en confianza parcial en WorkflowServiceHost .
La conservación de excepciones en un escenario de confianza parcial es una posible amenaza de seguridad. Para deshabilitar la conservación de excepciones, se debe agregar una extensión de tipo ExceptionPersistenceExtension al proyecto para no conservar excepciones. En el ejemplo de código siguiente se muestra cómo implementar este tipo.
public class ExceptionPersistenceExtension { public ExceptionPersistenceExtension() { this.PersistExceptions = false; } public bool PersistExceptions { get; set; } }Si las excepciones no van a serializarse, asegúrese de usar las excepciones dentro de un NoPersistScope.
Los autores de actividades deben sobrescribir CacheMetadata para evitar que el tiempo de ejecución del flujo de trabajo reflexione automáticamente sobre el tipo. Los argumentos y las actividades secundarias deben ser no NULL y Bind deben llamarse explícitamente. Para obtener más información sobre cómo invalidar CacheMetadata, consulte Exposición de datos con CacheMetadata. Además, las instancias de argumentos que son de un tipo que es
internalo privado deben crearse explícitamente en CacheMetadata para evitar la creación por reflexión.Los tipos no usarán ISerializable ni SerializableAttribute para la serialización; los tipos que se van a serializar deben admitir DataContractSerializer.
Las expresiones que usan LambdaValue<TResult> requieren RestrictedMemberAccessy, por tanto, no funcionarán con confianza parcial. Los flujos de trabajo que usan LambdaValue<TResult> deben reemplazar esas expresiones por actividades que derivan de CodeActivity<TResult>. .
Las expresiones no se pueden compilar mediante TextExpressionCompiler o el compilador hospedado de Visual Basic en confianza parcial, pero se pueden ejecutar expresiones compiladas previamente.
No se puede usar un único ensamblado que use la transparencia de nivel 2 en .NET Framework 4, .NET Framework 4.6.1 en plena confianza y .NET Framework 4.6.1 en confianza parcial.
Nuevas funcionalidades del diseñador
Búsqueda del diseñador
Para que los flujos de trabajo más grandes sean más fáciles de administrar, ahora se pueden buscar por palabra clave. Esta funcionalidad solo está disponible en Visual Studio; esta funcionalidad no está disponible en un editor de diseño rehospedado. Hay dos tipos de búsquedas disponibles:
Búsqueda rápida, iniciada con Ctrl+F o Editar, Buscar y reemplazar, Búsqueda rápida.
Busque en Archivos, iniciado con Ctrl+Mayús+F o Editar, Buscar y reemplazar, Buscar en archivos.
Tenga en cuenta que No se admite Replace.
Búsqueda rápida
Las palabras clave que se buscan en los flujos de trabajo coincidirán con los siguientes elementos del diseñador:
Propiedades de Activity objetos, FlowNode objetos, State objetos, Transition objetos y otros elementos de control de flujo personalizados.
Variables
Argumentos
Expresiones
La búsqueda rápida se realiza en el árbol del ModelItem diseñador. La búsqueda rápida no buscará espacios de nombres importados en la definición del flujo de trabajo.
Buscar en archivos
Las palabras clave que se buscan en los flujos de trabajo coincidirán con el contenido real de los archivos de flujo de trabajo. Los resultados de la búsqueda se mostrarán en el panel de vista Resultados de búsqueda de Visual Studio. Al hacer doble clic en el elemento de resultado, se desplazará a la actividad que contiene la coincidencia en el diseñador de flujo de trabajo.
Eliminar elemento de menú contextual en el diseñador de variables y argumentos
En .NET Framework 4, las variables y los argumentos solo se pueden eliminar en el diseñador mediante el teclado. A partir de .NET Framework 4.5, se pueden eliminar variables y argumentos mediante el menú contextual.
En la captura de pantalla siguiente se muestra el menú contextual del diseñador de variables y argumentos.
Rodear de forma automática con secuencia
Dado que un flujo de trabajo o determinadas actividades de contenedor (como NoPersistScope) solo pueden contener una sola actividad de cuerpo, agregar una segunda actividad requiere que el desarrollador elimine la primera actividad, agregue una Sequence actividad y, a continuación, agregue ambas actividades a la actividad de secuencia. A partir de .NET Framework 4.5, al agregar una segunda actividad a la superficie del diseñador, se creará automáticamente una Sequence actividad para envolver ambas actividades.
La captura de pantalla siguiente muestra una actividad WriteLine en Body de NoPersistScope.
La captura de pantalla siguiente muestra la actividad Sequence creada automáticamente en Body cuando se coloca un segundo elemento WriteLine debajo del primero.
Modo panorámico
Para navegar más fácilmente por un flujo de trabajo grande en el diseñador, se puede habilitar el modo panorámico, lo que permite al desarrollador hacer clic y arrastrar para mover la parte visible del flujo de trabajo, en lugar de necesitar usar las barras de desplazamiento. El botón para activar el modo panorámico está en la esquina inferior derecha del diseñador.
En la captura de pantalla siguiente se muestra el botón de panorámica que se encuentra en la esquina inferior derecha del diseñador de flujo de trabajo.
El botón central del mouse o la barra espaciadora también se pueden usar para desplazar el diseñador de flujos de trabajo.
Selección múltiple
Se pueden seleccionar varias actividades al mismo tiempo, ya sea arrastrando un rectángulo alrededor de ellas (cuando el modo panorámico no está habilitado) o manteniendo presionada la tecla Ctrl y haciendo clic en las actividades deseadas una por una.
También se pueden arrastrar y colocar varias selecciones de actividad en el diseñador, y se puede interactuar con ellas usando el menú contextual.
Vista de esquema de elementos del flujo de trabajo
Para facilitar la navegación de los flujos de trabajo jerárquicos, los componentes de un flujo de trabajo se muestran en una vista esquema de estilo de árbol. La vista Esquema se muestra en la vista Esquema del documento. Para abrir esta vista, en el menú superior, seleccione Ver, Otras ventanas, Esquema del documento o presione Ctrl W,U. Al hacer clic en un nodo en la vista esquema, se desplazará a la actividad correspondiente en el diseñador de flujo de trabajo y se actualizará la vista esquema para mostrar las actividades seleccionadas en el diseñador.
En la captura de pantalla siguiente del flujo de trabajo completado del Tutorial de introducción se muestra la vista de esquema con un flujo de trabajo secuencial.
Expresiones de C#
Antes de .NET Framework 4.5, todas las expresiones de los flujos de trabajo solo se podían escribir en Visual Basic. En .NET Framework 4.5, las expresiones de Visual Basic solo se usan para los proyectos creados con Visual Basic. Los proyectos de Visual C# ahora usan C# para expresiones. Se proporciona un editor de expresiones de C# totalmente funcional, con funcionalidades como resaltado de sintaxis e IntelliSense. Los proyectos de flujo de trabajo de C# creados en versiones anteriores que usan expresiones de Visual Basic seguirán funcionando.
Las expresiones de C# se validan en tiempo de diseño. Los errores en las expresiones de C# se marcarán con un subrayado ondulado rojo.
Para obtener más información sobre las expresiones de C#, vea Expresiones de C#.
Más control de la visibilidad de los elementos de barra y de encabezado de shell
En un diseñador rehospedado, algunos de los controles estándar de la interfaz de usuario pueden no tener significado para un flujo de trabajo determinado y se pueden desactivar. En .NET Framework 4, esta personalización solo es compatible con la barra de shell en la parte inferior del diseñador. En .NET Framework 4.5, la visibilidad de los elementos de encabezado del shell en la parte superior del diseñador se puede ajustar estableciendo WorkflowShellHeaderItemsVisibility con el valor adecuado ShellHeaderItemsVisibility .
Conexión e inserción automáticas en flujos de trabajo de diagrama de flujo y de máquina de estados
En .NET Framework 4, las conexiones entre nodos de un flujo de trabajo de diagrama de flujo tenían que agregarse manualmente. En .NET Framework 4.5, los nodos Diagrama de flujo y Máquina de estado tienen puntos de conexión automática que se vuelven visibles cuando se arrastra una actividad desde el cuadro de herramientas a la superficie del diseñador. Al colocar una actividad en uno de estos puntos se agrega automáticamente la actividad junto con la conexión necesaria.
En la captura de pantalla siguiente se muestran los puntos adjuntos que se vuelven visibles cuando se arrastra una actividad desde el cuadro de herramientas.
Las actividades también se pueden arrastrar a las conexiones entre nodos y estados del diagrama de flujo para insertar automáticamente un nodo entre otros dos. La captura de pantalla siguiente muestra la línea de conexión resaltada donde se pueden arrastrar y colocar actividades del cuadro de herramientas.
Anotaciones del diseñador
Para facilitar el desarrollo de flujos de trabajo más grandes, el diseñador ahora admite la adición de anotaciones para ayudar a realizar un seguimiento del proceso de diseño. La anotación se puede agregar a actividades, estados, nodos de diagrama de flujo, variables y argumentos. En la captura de pantalla siguiente se muestra el menú contextual que se usa para agregar anotaciones al diseñador.
Estados de depuración
En .NET Framework 4, los elementos que no son de actividad no podían admitir puntos de interrupción de depuración, ya que no eran unidades de ejecución. Esta versión proporciona un mecanismo para agregar puntos de interrupción a State objetos. Cuando se establece un punto de ruptura en State, la ejecución se interrumpirá cuando se realice la transición al estado, antes de la programación de sus actividades de entrada o desencadenadores.
Definir y consumir objetos ActivityDelegate en el diseñador
Las actividades de .NET Framework 4 usan ActivityDelegate objetos para exponer puntos de ejecución en los que otras partes del flujo de trabajo podrían interactuar con la ejecución de un flujo de trabajo, pero el uso de estos puntos de ejecución normalmente requería una cantidad razonable de código. En esta versión, los desarrolladores pueden definir y consumir delegados de actividad mediante el diseñador de flujos de trabajo. Para más información, consulte Definición y consumo de delegados de actividad en el Diseñador de flujo de trabajo.
Validación en tiempo de compilación
En .NET Framework 4, los errores de validación de flujo de trabajo no se contaron como errores de compilación durante la compilación de un proyecto de flujo de trabajo. Esto significaba que la compilación de un proyecto de flujo de trabajo se podía realizar correctamente incluso cuando se produjeron errores de validación de flujo de trabajo. En .NET Framework 4.5, los errores de validación de flujo de trabajo provocan un error en la compilación.
Validación en segundo plano en tiempo de diseño
En .NET Framework 4, los flujos de trabajo se validaron como un proceso en primer plano, lo que podría bloquear la interfaz de usuario durante procesos de validación complejos o lentos. La validación del flujo de trabajo ahora tiene lugar en un subproceso en segundo plano, de modo que la interfaz de usuario no esté bloqueada.
Ver el estado ubicado en una ubicación independiente en archivos XAML
En .NET Framework 4, la información de estado de vista de un flujo de trabajo se almacena en el archivo XAML en muchas ubicaciones diferentes. Esto es inconveniente para los desarrolladores que quieran leer XAML directamente o escribir código para quitar la información de estado de vista. En .NET Framework 4.5, la información de estado de vista del archivo XAML se serializa como un elemento independiente en el archivo XAML. Los desarrolladores pueden localizar y editar fácilmente la información de estado de vista de una actividad o quitar el estado de vista por completo.
Extensibilidad de expresiones
En .NET Framework 4.5, proporcionamos un medio para que los desarrolladores creen su propia experiencia de creación de expresiones y autoría de expresiones que se puede integrar en el diseñador de flujos de trabajo.
Habilitación de las características de flujo de trabajo 4.5 en el diseñador rehospedado
Para conservar la compatibilidad con versiones anteriores, algunas características nuevas incluidas en .NET Framework 4.5 no están habilitadas de forma predeterminada en el diseñador rehospedado. Esto es para asegurarse de que las aplicaciones existentes que usan el diseñador reubicado no queden inoperativas al actualizarse a la última versión. Para habilitar nuevas características en el diseñador rehospedado, establezca TargetFrameworkName en ".NET Framework 4.5" o establezca miembros individuales de DesignerConfigurationService para habilitar características individuales.
Nuevos modelos de desarrollo de flujo de trabajo
Además de los modelos de desarrollo de flujo de trabajo de diagrama de flujo y secuenciales, esta versión incluye flujos de trabajo de máquina de estados y servicios de flujo de trabajo de contrato primero.
Flujos de trabajo de máquina de estados
Los flujos de trabajo de máquina de estado se introdujeron como parte de .NET Framework 4, versión 4.0.1 en Microsoft .NET Framework 4 Platform Update 1. Esta actualización incluía varias clases y actividades nuevas que permitían a los desarrolladores crear flujos de trabajo de máquina de estado. Estas clases y actividades se han actualizado para .NET Framework 4.5. Las actualizaciones incluyen:
Capacidad de establecer puntos de interrupción en estados
La capacidad de copiar y pegar transiciones en el diseñador de flujo de trabajo
Compatibilidad del diseñador para la creación de transiciones de desencadenador compartidas
Actividades usadas para crear flujos de trabajo de State Machine, incluidos: StateMachine, Statey Transition
En la captura de pantalla siguiente se muestra el flujo de trabajo de máquina de estado completado del Tutorial de introducción paso Cómo: Crear un flujo de trabajo de máquina de estado.
Para obtener más información sobre cómo crear flujos de trabajo de máquinas de estado, consulte Flujos de trabajo de máquinas de estado.
Desarrollo de flujo de trabajo de contrato primero
La herramienta de desarrollo de flujo de trabajo basado en contratos permite al desarrollador diseñar un contrato primero en el código y luego, con unos pocos clics en Visual Studio, generar automáticamente una plantilla de actividad en el panel de herramientas que representa cada operación. A continuación, estas actividades se usan para crear un flujo de trabajo que implemente las operaciones definidas por el contrato. El diseñador de flujo de trabajo validará el servicio de flujo de trabajo para asegurarse de que estas operaciones se implementan y la firma del flujo de trabajo coincide con la firma del contrato. El desarrollador también puede asociar un servicio de flujo de trabajo a una colección de contratos implementados. Para obtener más información sobre el desarrollo de servicios de flujo de trabajo basados en contratos, consulte Creación de un servicio de flujo de trabajo que consume un contrato de servicio existente.