Novidades no Windows Workflow Foundation no .NET Framework 4.5
O Windows Workflow Foundation (WF) no .NET Framework 4.5 apresenta muitas funcionalidades novas, como novas atividades, capacidades de estruturador e modelos de desenvolvimento de fluxos de trabalho. Muitas das novas funcionalidades de fluxo de trabalho introduzidas no .NET Framework 4.5 são suportadas no estruturador de fluxo de trabalho realojado. Para obter mais informações sobre as novas funcionalidades suportadas, consulte Suporte para Novas Funcionalidades do Workflow Foundation 4.5 no Estruturador de Fluxos de Trabalho Realojados. Para obter mais informações sobre a migração de aplicações de fluxo de trabalho do .NET Framework 3.0 e do .NET Framework 3.5 para utilizar a versão mais recente, veja Orientações de Migração. Este artigo fornece uma descrição geral das novas funcionalidades de fluxo de trabalho introduzidas no .NET Framework 4.5.
Aviso
As novas funcionalidades do Windows Workflow Foundation introduzidas no .NET Framework 4.5 não estão disponíveis para projetos que visam versões anteriores da arquitetura. Se um projeto que tenha como destino .NET Framework 4.5 for reencavado para uma versão anterior da arquitetura, podem ocorrer vários problemas.
- As expressões C# serão substituídas no estruturador pela mensagem Valor foi definido em XAML.
- Ocorrerão muitos erros de compilação, incluindo o seguinte erro.
O formato de ficheiro não é compatível com a arquitetura de filtragem atual. Para converter o formato de ficheiro, guarde explicitamente o ficheiro. Esta mensagem de erro desaparece depois de guardar o ficheiro e reabrir o estruturador.
Controlo de Versões do Fluxo de Trabalho
.NET Framework 4.5 introduziu várias novas funcionalidades de controlo de versões baseadas na nova WorkflowIdentity classe. WorkflowIdentity fornece aos autores de aplicações de fluxo de trabalho um mecanismo para mapear uma instância de fluxo de trabalho persistente com a respetiva definição.
Os programadores que utilizam WorkflowApplication o alojamento podem utilizar WorkflowIdentity para permitir o alojamento de várias versões de um fluxo de trabalho lado a lado. As instâncias de fluxo de trabalho persistentes podem ser carregadas com a nova WorkflowApplicationInstance classe e, em seguida, podem DefinitionIdentity ser utilizadas pelo anfitrião para fornecer a versão correta da definição do fluxo de trabalho ao instanciar o WorkflowApplication. Para obter mais informações, veja Using WorkflowIdentity and Versioning and How to: Host Multiple Versions of a Workflow Side-by-Side (Utilizar o Fluxo de TrabalhoIdentidade e Controlo de Versões) e How to: Host Multiple Versions of a Workflow Side-by-Side (Utilizar o Fluxo de TrabalhoIdentidade e Controlo de Versões) e How to: Host Multiple Versions of a Workflow Side-by-Side (Utilizar
WorkflowServiceHost é agora um anfitrião com várias versões. Quando é implementada uma nova versão de um serviço de fluxo de trabalho, são criadas novas instâncias com o novo serviço, mas as instâncias existentes são concluídas com a versão anterior. Para obter mais informações, veja Controlo de Versões Lado a Lado no WorkflowServiceHost.
É introduzida uma atualização dinâmica que fornece um mecanismo para atualizar a definição de uma instância de fluxo de trabalho persistente. Para obter mais informações, veja Atualização Dinâmica e Como: Atualizar a Definição de uma Instância de Fluxo de Trabalho em Execução.
É fornecido um script de base de dados SqlWorkflowInstanceStoreSchemaUpgrade.sql para atualizar as bases de dados de persistência criadas com os scripts de base de dados .NET Framework 4. Este script atualiza .NET Framework 4 bases de dados de persistência para suportar as novas capacidades de controlo de versões introduzidas no .NET Framework 4.5. As instâncias de fluxo de trabalho persistentes na base de dados recebem valores de controlo de versões predefinidos e podem participar na execução lado a lado e na atualização dinâmica. Para obter mais informações, veja Atualizar Bases de Dados de Persistência do .NET Framework 4 para Suportar o Controlo de Versões do Fluxo de Trabalho.
Atividades
A biblioteca de atividades incorporada contém novas atividades e novas funcionalidades para atividades existentes.
Âmbito NoPersist
NoPersistScope é uma nova atividade de contentor que impede a persistência de um fluxo de trabalho quando as atividades subordinadas do NoPersistScope estão a ser executadas. Isto é útil em cenários em que não é adequado que o fluxo de trabalho persista, como quando o fluxo de trabalho está a utilizar recursos específicos da máquina, como identificadores de ficheiros ou durante transações de base de dados. Anteriormente, para impedir que a persistência ocorresse durante a execução de uma atividade, era necessário um personalizado NativeActivity que utilizasse um NoPersistHandle .
Novas Capacidades de Fluxograma
Os fluxogramas são atualizados para .NET Framework 4.5 e têm as seguintes novas capacidades:
A
DisplayName
propriedade de uma FlowSwitch<T> atividade ou FlowDecision é editável. Isto permitirá que o estruturador de atividade mostre mais informações sobre o objetivo da atividade.Os fluxogramas têm uma nova propriedade chamada ValidateUnconnectedNodes; a predefinição para esta propriedade é
False
. Se esta propriedade estiver definida comoTrue
, os nós de fluxograma não ligados produzirão erros de validação.
Suporte para Confiança Parcial
Os fluxos de trabalho no .NET Framework 4 exigiam um domínio de aplicação totalmente fidedigno. No .NET Framework 4.5, os fluxos de trabalho podem funcionar num ambiente de confiança parcial. Num ambiente de confiança parcial, os componentes de terceiros podem ser utilizados sem lhes conceder acesso total aos recursos do anfitrião. Algumas preocupações com a execução de fluxos de trabalho em confiança parcial são as seguintes:
A utilização de componentes legados (incluindo Regras) contidos na Interop atividade não é suportada sob confiança parcial.
A execução de fluxos de trabalho em fidedignidade parcial no WorkflowServiceHost não é suportada.
Manter exceções num cenário de confiança parcial é uma potencial ameaça à segurança. Para desativar a persistência de exceções, tem de ser adicionada uma extensão do tipo ExceptionPersistenceExtension ao projeto para optar ativamente por não participar em exceções persistentes. O exemplo de código seguinte demonstra como implementar este tipo.
public class ExceptionPersistenceExtension { public ExceptionPersistenceExtension() { this.PersistExceptions = false; } public bool PersistExceptions { get; set; } }
Se as exceções não forem serializadas, certifique-se de que são utilizadas exceções num NoPersistScope.
Os autores de atividade devem substituir CacheMetadata para evitar que o runtime do fluxo de trabalho execute automaticamente uma reflexão em relação ao tipo. Os argumentos e as atividades subordinadas têm de ser não nulos e Bind têm de ser chamados explicitamente. Para obter mais informações sobre a substituição CacheMetadatado , veja Expor dados com CacheMetadata. Além disso, as instâncias de argumentos que são de um tipo ou
internal
privado têm de ser explicitamente criadas no CacheMetadata para evitar ser criadas por reflexão.Os tipos não irão utilizar ISerializable nem SerializableAttribute para serialização; os tipos que devem ser serializados têm de suportar DataContractSerializer.
As expressões que utilizam LambdaValue<TResult> requerem RestrictedMemberAccess, pelo que não funcionarão sob confiança parcial. Os fluxos de trabalho que utilizam LambdaValue<TResult> devem substituir essas expressões por atividades derivadas de CodeActivity<TResult>. .
As expressões não podem ser compiladas com TextExpressionCompiler o ou o compilador alojado no Visual Basic em confiança parcial, mas as expressões compiladas anteriormente podem ser executadas.
Uma única assemblagem que utiliza a Transparência de Nível 2 não pode ser utilizada no .NET Framework 4, .NET Framework 4.6.1 em total confiança e .NET Framework 4.6.1 em confiança parcial.
Novas Capacidades do Estruturador
Pesquisa do Estruturador
Para tornar os fluxos de trabalho maiores mais geríveis, os fluxos de trabalho podem agora ser pesquisados por palavra-chave. Esta funcionalidade só está disponível no Visual Studio; esta funcionalidade não está disponível num estruturador realojado. Existem dois tipos de pesquisas disponíveis:
Quick Find, iniciada com Ctrl+F ou Editar, Localizar e Substituir, Localizar Rapidamente.
Localize em Ficheiros, iniciado com Ctrl+Shift+F ou Editar, Localizar e Substituir, Localizar em Ficheiros.
Tenha em atenção que Substituir não é suportado.
Localização Rápida
As palavras-chave pesquisadas nos fluxos de trabalho corresponderão aos seguintes itens de estruturador:
Propriedades de Activity objetos, FlowNode objetos, State objetos, Transition objetos e outros itens de controlo de fluxo personalizados.
Variáveis
Argumentos
Expressions (Expressões)
A Descoberta Rápida é efetuada na árvore do ModelItem estruturador. A Localização Rápida não localizará os espaços de nomes importados na definição do fluxo de trabalho.
Localizar em Ficheiros
As palavras-chave pesquisadas nos fluxos de trabalho corresponderão ao conteúdo real dos ficheiros de fluxo de trabalho. Os resultados da pesquisa serão apresentados no painel de vista Localizar Resultados do Visual Studio. Fazer duplo clique no item de resultado irá navegar para a atividade que contém a correspondência no estruturador de fluxo de trabalho.
Eliminar item de menu de contexto na variável e no estruturador de argumentos
No .NET Framework 4, as variáveis e os argumentos só podiam ser eliminados no estruturador com o teclado. A partir do .NET Framework 4.5, as variáveis e os argumentos podem ser eliminados através do menu de contexto.
A captura de ecrã seguinte mostra o menu de contexto variável e estruturador de argumentos.
Colocação automática em Sequência
Uma vez que um fluxo de trabalho ou determinadas atividades de contentor (como NoPersistScope) só podem conter uma única atividade corporal, adicionar uma segunda atividade exigiu que o programador eliminasse a primeira atividade, adicionasse uma Sequence atividade e, em seguida, adicionasse ambas as atividades à atividade de sequência. A partir do .NET Framework 4.5, ao adicionar uma segunda atividade à superfície do estruturador, será criada automaticamente uma Sequence
atividade para encapsular ambas as atividades.
A seguinte captura de ecrã mostra uma WriteLine
atividade no Body
de um NoPersistScope
.
A seguinte captura de ecrã mostra a atividade criada Sequence
automaticamente no momento em Body
que um segundo WriteLine
é removido abaixo do primeiro.
Modo de Painel
Para navegar mais facilmente num fluxo de trabalho grande no estruturador, o modo de painel pode ser ativado, permitindo ao programador clicar e arrastar para mover a parte visível do fluxo de trabalho, em vez de precisar de utilizar as barras de deslocamento. O botão para ativar o modo de painel encontra-se no canto inferior direito do estruturador.
A seguinte captura de ecrã mostra o botão do painel localizado no canto inferior direito do estruturador do fluxo de trabalho.
O botão do rato do meio ou a barra de espaço também podem ser utilizados para percorrer o estruturador do fluxo de trabalho.
Seleção múltipla
Várias atividades podem ser selecionadas de uma só vez, ao arrastar um retângulo à sua volta (quando o modo pan não está ativado) ou ao manter premida a tecla Ctrl e clicar nas atividades pretendidas uma a uma.
Várias seleções de atividade também podem ser arrastadas e removidas no estruturador e também podem ser interagidas com o menu de contexto.
Vista hierárquica de itens de fluxo de trabalho
Para facilitar a navegação dos fluxos de trabalho hierárquicos, os componentes de um fluxo de trabalho são apresentados numa vista hierárquica de estilo de árvore. A vista hierárquica é apresentada na vista Destaques do Documento . Para abrir esta vista, no menu superior, selecione Ver, Outro Windows, Destaque do Documento ou prima Ctrl W,U. Clicar num nó na vista de destaques irá navegar para a atividade correspondente no estruturador de fluxo de trabalho e a vista de destaque será atualizada para mostrar as atividades selecionadas no estruturador.
A seguinte captura de ecrã do fluxo de trabalho concluído do Tutorial do Introdução mostra a vista hierárquica com um fluxo de trabalho sequencial.
Expressões C#
Antes .NET Framework 4.5, todas as expressões nos fluxos de trabalho só podiam ser escritas no Visual Basic. No .NET Framework 4.5, as expressões do Visual Basic são utilizadas apenas para projetos criados com o Visual Basic. Os projetos do Visual C# utilizam agora C# para expressões. É fornecido um editor de expressões C# totalmente funcional que capacidades como o realce gramatical e o intellisense. Os projetos de fluxo de trabalho C# criados em versões anteriores que utilizam expressões do Visual Basic continuarão a funcionar.
As expressões C# são validadas no momento da conceção. Os erros nas expressões C# serão marcados com um sublinhado ondulado vermelho.
Para obter mais informações sobre expressões C#, consulte Expressões C#.
Mais controlo da visibilidade da barra de shell e dos itens de cabeçalho
Num estruturador realojado, alguns dos controlos de IU padrão podem não ter significado para um determinado fluxo de trabalho e podem ser desativados. No .NET Framework 4, esta personalização só é suportada pela barra de shell na parte inferior do estruturador. No .NET Framework 4.5, a visibilidade dos itens de cabeçalho da shell na parte superior do estruturador pode ser ajustada ao definir WorkflowShellHeaderItemsVisibility com o valor adequadoShellHeaderItemsVisibility.
Ligar automaticamente e inserir automaticamente em Fluxosgramas e fluxos de trabalho do Computador de Estado
No .NET Framework 4, as ligações entre nós num fluxograma tiveram de ser adicionadas manualmente. No .NET Framework 4.5, os nós Fluxograma e Máquina de Estado têm pontos de ligação automática que ficam visíveis quando uma atividade é arrastada da caixa de ferramentas para a superfície do estruturador. Remover uma atividade num destes pontos adiciona automaticamente a atividade juntamente com a ligação necessária.
A captura de ecrã seguinte mostra os pontos de anexo que ficam visíveis quando uma atividade é arrastada da caixa de ferramentas.
As atividades também podem ser arrastadas para ligações entre nós de fluxograma e estados para inserir automaticamente o nó entre dois outros nós. A captura de ecrã seguinte mostra a linha de ligação realçada onde as atividades podem ser arrastadas da caixa de ferramentas e removidas.
Anotações do Estruturador
Para facilitar o desenvolvimento de fluxos de trabalho maiores, o estruturador suporta agora a adição de anotações para ajudar a controlar o processo de conceção. A anotação pode ser adicionada a atividades, estados, nós de fluxograma, variáveis e argumentos. A captura de ecrã seguinte mostra o menu de contexto utilizado para adicionar anotações ao estruturador.
Estados de depuração
No .NET Framework 4, os elementos não atividade não podiam suportar pontos de interrupção de depuração, uma vez que não eram unidades de execução. Esta versão fornece um mecanismo para adicionar pontos de interrupção a State objetos. Quando um ponto de interrupção é definido num State, a execução irá interromper quando o estado for transitado para, antes de as respetivas atividades de entrada ou acionadores serem agendados.
Definir e consumir objetos ActivityDelegate no estruturador
As atividades no .NET Framework 4 utilizaram ActivityDelegate objetos para expor pontos de execução onde outras partes do fluxo de trabalho podiam interagir com a execução de um fluxo de trabalho, mas a utilização destes pontos de execução normalmente exigia uma quantidade justa de código. Nesta versão, os programadores podem definir e consumir delegados de atividade com o estruturador de fluxos de trabalho. Para obter mais informações, veja How to: Define and consume activity delegates in the Workflow Designer (Como: Definir e consumir delegados de atividade no Estruturador de Fluxos de Trabalho).
Validação do tempo de compilação
No .NET Framework 4, os erros de validação do fluxo de trabalho não foram contabilizados como erros de compilação durante a compilação de um projeto de fluxo de trabalho. Isto significava que a criação de um projeto de fluxo de trabalho poderia ser bem-sucedida mesmo quando existiam erros de validação do fluxo de trabalho. No .NET Framework 4.5, os erros de validação do fluxo de trabalho fazem com que a compilação falhe.
Validação de fundo de tempo de estrutura
No .NET Framework 4, os fluxos de trabalho foram validados como um processo de primeiro plano, o que poderia potencialmente bloquear a IU durante processos de validação complexos ou demorados. A validação do fluxo de trabalho ocorre agora num thread em segundo plano, para que a IU não seja bloqueada.
Ver estado localizado numa localização separada em ficheiros XAML
No .NET Framework 4, as informações de estado de visualização de um fluxo de trabalho são armazenadas no ficheiro XAML em várias localizações diferentes. Isto é inconveniente para os programadores que querem ler XAML diretamente ou escrever código para remover as informações de estado de visualização. No .NET Framework 4.5, as informações de estado de visualização no ficheiro XAML são serializadas como um elemento separado no ficheiro XAML. Os programadores podem localizar e editar facilmente as informações de estado de visualização de uma atividade ou remover completamente o estado de visualização.
Extensibilidade da expressão
No .NET Framework 4.5, fornecemos uma forma de os programadores criarem a sua própria experiência de criação de expressões e expressões que podem ser ligadas ao estruturador de fluxos de trabalho.
Optar ativamente por participar nas funcionalidades do Fluxo de Trabalho 4.5 no estruturador realojado
Para preservar a retrocompatibilidade, algumas funcionalidades novas incluídas no .NET Framework 4.5 não estão ativadas por predefinição no estruturador realojado. Isto é para garantir que as aplicações existentes que utilizam o estruturador realojado não são quebradas ao atualizar para a versão mais recente. Para ativar novas funcionalidades no estruturador realojado, defina TargetFrameworkName como ".NET Framework 4.5" ou defina membros individuais de DesignerConfigurationService para ativar funcionalidades individuais.
Novos Modelos de Desenvolvimento de Fluxo de Trabalho
Além dos modelos de desenvolvimento de fluxogramas e fluxos de trabalho sequenciais, esta versão inclui fluxos de trabalho do State Machine e serviços de fluxo de trabalho contract-first.
Fluxos de trabalho da máquina de estado
Os fluxos de trabalho da máquina de estado foram introduzidos como parte do .NET Framework 4, versão 4.0.1 no Microsoft .NET Framework 4 Platform Update 1. Esta atualização incluiu várias novas classes e atividades que permitiram aos programadores criar fluxos de trabalho de máquinas de estado. Estas classes e atividades foram atualizadas para .NET Framework 4.5. Atualizações incluem:
A capacidade de definir pontos de interrupção em estados
A capacidade de copiar e colar transições no estruturador de fluxos de trabalho
Suporte do estruturador para a criação de transição de acionador partilhado
Atividades utilizadas para criar fluxos de trabalho do Computador de Estado, incluindo: StateMachine, Statee Transition
A captura de ecrã seguinte mostra o fluxo de trabalho completo da máquina de estado a partir do passo tutorial IntroduçãoComo: Criar um Fluxo de Trabalho da Máquina de Estado.
Para obter mais informações sobre como criar fluxos de trabalho de máquinas de estado, veja Fluxos de Trabalho do Computador de Estado.
Desenvolvimento do fluxo de trabalho contract-first
A ferramenta de desenvolvimento de fluxo de trabalho contract-first permite que o programador crie primeiro um contrato em código e, em seguida, com alguns cliques no Visual Studio, gere automaticamente um modelo de atividade na caixa de ferramentas que representa cada operação. Estas atividades são então utilizadas para criar um fluxo de trabalho que implementa as operações definidas pelo contrato. O estruturador do fluxo de trabalho validará o serviço de fluxo de trabalho para garantir que estas operações são implementadas e que a assinatura do fluxo de trabalho corresponde à assinatura do contrato. O programador também pode associar um serviço de fluxo de trabalho a uma coleção de contratos implementados. Para obter mais informações sobre o desenvolvimento do serviço de fluxo de trabalho contract-first, veja Como: Criar um serviço de fluxo de trabalho que consome um contrato de serviço existente.