Compartilhar via


Novidades no Windows Workflow Foundation no .NET Framework 4.5

O Windows Workflow Foundation (WF) no .NET Framework 4.5 apresenta muitos recursos novos, como novas atividades, recursos de designer e modelos de desenvolvimento de fluxo de trabalho. Muitos, mas não todos, dos novos recursos de fluxo de trabalho introduzidos no .NET Framework 4.5 têm suporte no designer de fluxo de trabalho hospedado novamente. Para obter mais informações sobre o suporte aos novos recursos, consulte Suporte para novos recursos do Workflow Foundation 4.5 no Designer de Fluxo de Trabalho Rehospedado. Para obter mais informações sobre como migrar aplicativos de fluxo de trabalho do .NET Framework 3.0 e .NET Framework 3.5 para usar a versão mais recente, consulte Diretrizes de Migração. Este artigo fornece uma visão geral dos novos recursos de fluxo de trabalho introduzidos no .NET Framework 4.5.

Aviso

Os novos recursos do Windows Workflow Foundation introduzidos no .NET Framework 4.5 não estão disponíveis para projetos destinados a versões anteriores da estrutura. Se um projeto direcionado ao .NET Framework 4.5 for redirecionado para uma versão anterior da estrutura, vários problemas poderão ocorrer.

  • As expressões C# serão substituídas no designer pelo valor da mensagem que foi definido em XAML.
  • Muitos erros de build ocorrerão, incluindo o erro a seguir.

O formato de arquivo não é compatível com a estrutura de direcionamento atual. Para converter o formato de arquivo, salve explicitamente o arquivo. Essa mensagem de erro desaparecerá depois que você salvar o arquivo e reabrir o designer.

Controle de versão do fluxo de trabalho

O .NET Framework 4.5 introduziu vários novos recursos de controle de versão com base na nova WorkflowIdentity classe. WorkflowIdentity fornece aos autores do aplicativo de fluxo de trabalho um mecanismo para mapear uma instância de fluxo de trabalho persistente com sua definição.

Atividades

A biblioteca de atividades interna contém novas atividades e novos recursos para atividades existentes.

Escopo NoPersist

NoPersistScope é uma nova atividade de contêiner que impede que um fluxo de trabalho seja persistido quando as atividades filhas do NoPersistScope estão sendo executadas. Isso é útil em cenários em que não é apropriado persistir o fluxo de trabalho, como quando o fluxo de trabalho está usando recursos específicos do computador, como identificadores de arquivo ou durante transações de banco de dados. Anteriormente, para impedir que a persistência ocorresse durante a execução de uma atividade, era necessário um NativeActivity personalizado que usasse um NoPersistHandle.

Novas funcionalidades de fluxograma

Os fluxogramas são atualizados para o .NET Framework 4.5 e têm os seguintes novos recursos:

  • A DisplayName propriedade de uma FlowSwitch<T> ou FlowDecision atividade é editável. Isso permitirá que o designer de atividades mostre mais informações sobre a finalidade da atividade.

  • Os fluxogramas têm uma nova propriedade chamada ValidateUnconnectedNodes; o padrão para essa propriedade é False. Se essa propriedade estiver definida como True, nós de fluxograma não conectados produzirão erros de validação.

Suporte para confiança parcial

Os fluxos de trabalho no .NET Framework 4 exigiam um domínio de aplicativo totalmente confiável. No .NET Framework 4.5, os fluxos de trabalho podem operar em um ambiente de confiança parcial. Em um ambiente de confiança parcial, os componentes de terceiros podem ser usados sem conceder-lhes acesso total aos recursos do host. Algumas preocupações sobre a execução de fluxos de trabalho em confiança parcial são as seguintes:

  1. Não há suporte para o uso de componentes herdados (incluindo Regras) contidos na atividade Interop com confiança parcial.

  2. Não há suporte para a execução de fluxos de trabalho na WorkflowServiceHost confiança parcial.

  3. Persistir exceções em um cenário de confiança parcial é uma ameaça à segurança em potencial. Para desabilitar a persistência de exceções, uma extensão do tipo ExceptionPersistenceExtension deve ser adicionada ao projeto para recusar a persistência de exceções. O exemplo de código a seguir demonstra como implementar esse tipo.

    public class ExceptionPersistenceExtension
    {
        public ExceptionPersistenceExtension()
        {
            this.PersistExceptions = false;
        }
        public bool PersistExceptions { get; set; }
    }
    

    Se as exceções não forem serializadas, verifique se as exceções são usadas dentro de um NoPersistScope.

  4. Os autores de atividade devem substituir CacheMetadata para evitar que o runtime do fluxo de trabalho execute automaticamente a reflexão em relação ao tipo. Argumentos e atividades filho devem ser não nulos e Bind devem ser chamados explicitamente. Para mais informações sobre a redefinição de CacheMetadata, consulte Expondo dados com CacheMetadata. Além disso, instâncias de argumentos que são de um tipo que seja internal ou privado devem ser criadas explicitamente em CacheMetadata para evitar serem criadas reflectivamente.

  5. Tipos não usarão ISerializable ou SerializableAttribute para serialização; tipos que precisam ser serializados devem oferecer suporte a DataContractSerializer.

  6. Expressões que usam LambdaValue<TResult> exigem RestrictedMemberAccesse, portanto, não funcionarão sob confiança parcial. Os fluxos de trabalho que usam LambdaValue<TResult> devem substituir essas expressões por atividades que derivam de CodeActivity<TResult>. .

  7. Expressões não podem ser compiladas usando TextExpressionCompiler ou o compilador hospedado do Visual Basic em confiança parcial, mas expressões compiladas anteriormente podem ser executadas.

  8. Um único assembly que usa a Transparência de Nível 2 não pode ser usado no .NET Framework 4, no .NET Framework 4.6.1 em confiança total, nem no .NET Framework 4.6.1 em confiança parcial.

Novos recursos do Designer

Pesquisa do designer

Para tornar os fluxos de trabalho maiores mais gerenciáveis, os fluxos de trabalho agora podem ser pesquisados por palavra-chave. Esse recurso só está disponível no Visual Studio; esse recurso não está disponível em um designer hospedado novamente. Há dois tipos de pesquisas disponíveis:

  • Localização Rápida, iniciada com Ctrl+F ou Editar, Localizar e Substituir, Localização Rápida.

  • Localize em Arquivos, iniciado com Ctrl+Shift+F ou Editar, Localizar e Substituir, Localizar em Arquivos.

Observe que "Substituir" não é suportado.

Localização Rápida

As palavras-chave pesquisadas nos workflows corresponderão aos seguintes itens do designer:

  • Propriedades de Activity objetos, FlowNode objetos, State objetos, Transition objetos e outros itens de controle de fluxo personalizados.

  • Variables

  • Argumentos

  • Expressões

O Quick Find é executado na árvore do ModelItem designer. A Localização Rápida não localizará namespaces importados na definição do fluxo de trabalho.

Buscar nos Arquivos

As palavras-chave pesquisadas nos fluxos de trabalho corresponderão ao conteúdo real dos arquivos de fluxo de trabalho. Os resultados da pesquisa serão mostrados no painel de exibição Localizar Resultados do Visual Studio. Clicar duas vezes no item de resultado navegará até a atividade que contém a correspondência no designer de fluxo de trabalho.

Excluir item do menu de contexto no designer de variáveis e argumentos

No .NET Framework 4, variáveis e argumentos só podiam ser excluídos no designer usando o teclado. A partir do .NET Framework 4.5, variáveis e argumentos podem ser excluídos usando o menu de contexto.

A captura de tela a seguir mostra o menu de contexto do designer de argumentos e variáveis.

Menu de contexto do Designer de Variáveis e Argumentos

Envolvimento automático com sequência

Como um fluxo de trabalho ou determinadas atividades de contêiner (como NoPersistScope) só podem conter uma atividade de corpo único, adicionar uma segunda atividade exigiu que o desenvolvedor excluísse a primeira atividade, adicionasse uma Sequence atividade e adicionasse ambas as atividades à atividade de sequência. A partir do .NET Framework 4.5, ao adicionar uma segunda atividade à superfície do designer, uma Sequence atividade será criada automaticamente para encapsular ambas as atividades.

A captura de tela a seguir mostra uma atividade de WriteLine no Body de um NoPersistScope.

Uma atividade WriteLine no corpo de uma atividade NoPersistScope.

A captura de tela a seguir mostra a atividade de Sequence criada automaticamente no Body quando um segundo WriteLine é solto abaixo do primeiro.

Uma sequência criada automaticamente no corpo de um NoPersistScope.

Modo de Panorama

Para navegar com mais facilidade em um grande fluxo de trabalho no designer, o modo de painel pode ser habilitado, permitindo que o desenvolvedor clique e arraste para mover a parte visível do fluxo de trabalho, em vez de precisar usar as barras de rolagem. O botão para ativar o modo de superfície está no canto inferior direito do designer.

A captura de tela a seguir mostra o botão de rotação que está localizado no canto inferior direito do designer de fluxo de trabalho.

O botão de panorâmica realçado no designer de fluxo de trabalho.

O botão do meio do mouse ou a barra de espaço também podem ser usados para executar uma panorâmica do designer de fluxo de trabalho.

Seleção múltipla

Várias atividades podem ser selecionadas ao mesmo tempo, arrastando um retângulo ao seu redor (quando o modo de painel não está habilitado) ou segurando Ctrl e clicando nas atividades desejadas um a um.

Várias seleções de atividade também podem ser arrastadas e soltadas dentro do designer, e também podem ser interagidas usando o menu de contexto.

Exibição de destaque de itens de fluxo de trabalho

Para facilitar a navegação de fluxos de trabalho hierárquicos, os componentes de um fluxo de trabalho são mostrados em uma exibição de destaque em estilo de árvore. A exibição de estrutura de tópicos é exibida no modo de exibição da Estrutura do Documento. Para abrir esse modo de exibição, no menu superior, selecione Exibir, Outras Janelas, Estrutura de Tópicos do Documento ou pressione Ctrl W,U. Clicar em um nó na exibição de destaque navegará para a atividade correspondente no designer de fluxo de trabalho, e a exibição da estrutura será atualizada para mostrar as atividades que estão selecionadas no designer.

A captura de tela a seguir do fluxo de trabalho concluído do Tutorial de Introdução mostra a visão de estrutura com um fluxo de trabalho sequencial.

Captura de tela da visualização de estrutura com um fluxo de trabalho sequencial no Visual Studio.

Expressões em C#

Antes do .NET Framework 4.5, todas as expressões em fluxos de trabalho só podiam ser escritas no Visual Basic. No .NET Framework 4.5, as expressões do Visual Basic são usadas apenas para projetos criados usando o Visual Basic. Os projetos do Visual C# agora usam C# para expressões. Um editor de expressões C# totalmente funcional é fornecido, com recursos como realce de sintaxe e intellisense. Os projetos de fluxo de trabalho do C# criados em versões anteriores que usam expressões do Visual Basic continuarão funcionando.

As expressões em C# são validadas em tempo de design. Os erros em expressões C# serão marcados com um sublinhado ondulado vermelho.

Para obter mais informações sobre expressões C#, consulte Expressões em C#.

Mais controle da visibilidade da barra de shell e dos itens de cabeçalho

Em um designer hospedado novamente, alguns dos controles padrão de interface do usuário não podem ter o significado de um fluxo de trabalho específico, e podem ser desativados. No .NET Framework 4, essa personalização só tem suporte na barra de shell na parte inferior do designer. No .NET Framework 4.5, a visibilidade dos itens de cabeçalho do shell na parte superior do designer pode ser ajustada definindo WorkflowShellHeaderItemsVisibility com o valor apropriado ShellHeaderItemsVisibility .

Conexão automática e inserção automática em fluxograma e fluxos de trabalho de máquina de estado

No .NET Framework 4.5, as conexões entre nós em um fluxo de trabalho de fluxograma precisavam ser adicionadas manualmente. No .NET Framework 4.5, os nós de fluxograma e da máquina de estado têm pontos de conexão automática que ficam visíveis quando uma atividade é arrastada da caixa de ferramentas na superfície do designer. Soltar uma atividade em um destes pontos adiciona automaticamente a atividade junto com a conexão necessária.

A captura de tela a seguir mostra os pontos de anexação que ficam visíveis quando uma atividade é arrastada da caixa de ferramentas.

Nó de início de fluxograma mostrando pontos de conexão automática

As atividades também podem ser arrastadas em conexões entre nós de fluxograma e estados para inserção automática do nó entre dois outros nós. A captura de tela a seguir mostra a linha de conexão realçada em que as atividades podem ser arrastadas da caixa de ferramentas e soltas.

Identificador de inserção automática para soltar atividades

Anotações do Designer

Para facilitar o desenvolvimento de fluxos de trabalho maiores, o designer agora dá suporte à adição de anotações para ajudar a acompanhar o processo de design. A anotação pode ser adicionada a atividades, estados, nós de fluxograma, variáveis e argumentos. A captura de tela a seguir mostra o menu de contexto usado para adicionar anotações ao designer.

Captura de tela mostrando um menu para adicionar anotações.

Estados de depuração

No .NET Framework 4, os elementos não de atividade não podiam dar suporte a pontos de interrupção de depuração, pois 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 em um State, a execução é interrompida quando ocorre a transição para o estado, antes que suas atividades de entrada ou gatilhos sejam programados.

Definir e consumir objetos ActivityDelegate no designer

As atividades no .NET Framework 4 usavam ActivityDelegate objetos para expor pontos de execução em que outras partes do fluxo de trabalho poderiam interagir com a execução de um fluxo de trabalho, mas o uso desses pontos de execução geralmente exigia uma boa quantidade de código. Nesta versão, os desenvolvedores podem definir e consumir delegados de atividade usando o designer de fluxo de trabalho. Para obter mais informações, consulte Como definir e consumir delegados de atividades no Designer de Fluxo de Trabalho.

Validação de tempo de compilação

No .NET Framework 4, os erros de validação de fluxo de trabalho não foram contados como erros de build durante a compilação de um projeto de fluxo de trabalho. Isso significava que a criação de um projeto de fluxo de trabalho poderia ter êxito mesmo quando houvesse erros de validação de fluxo de trabalho. No .NET Framework 4.5, erros de validação de fluxo de trabalho fazem com que o build falhe.

Validação em segundo plano do tempo de design

No .NET Framework 4, os fluxos de trabalho foram validados como um processo em primeiro plano, o que poderia potencialmente bloquear a interface do usuário durante processos de validação complexos ou demorados. A validação do fluxo de trabalho agora ocorre em um thread em segundo plano, para que a interface do usuário não seja bloqueada.

Exibir o estado localizado em um local separado em arquivos XAML

No .NET Framework 4, as informações de estado de exibição de um fluxo de trabalho são armazenadas no arquivo XAML em muitos locais diferentes. Isso é inconveniente para desenvolvedores que desejam ler XAML diretamente ou escrever código para remover as informações de estado de exibição. No .NET Framework 4.5, as informações de estado de exibição no arquivo XAML são serializadas como um elemento separado no arquivo XAML. Os desenvolvedores podem localizar e editar facilmente as informações de estado de exibição de uma atividade ou remover o estado de exibição completamente.

Extensibilidade de expressão

No .NET Framework 4.5, fornecemos uma forma para os desenvolvedores criarem sua própria experiência de criação e edição de expressões, que pode ser integrada ao designer de fluxo de trabalho.

Aceitação dos recursos do Workflow 4.5 no designer hospedado novamente

Para preservar a compatibilidade com versões anteriores, alguns novos recursos incluídos no .NET Framework 4.5 não são habilitados por padrão no designer hospedado novamente. Este é para garantir que aplicativos existentes que usam o designer hospedado novamente não sejam interrompidos ao atualizar para a versão mais recente. Para habilitar novos recursos no designer re-hospedado, defina TargetFrameworkName como ".NET Framework 4.5" ou defina membros individuais de DesignerConfigurationService para habilitar recursos individuais.

Novos modelos de desenvolvimento de fluxo de trabalho

Além do fluxograma e de modelos sequenciais de desenvolvimento de fluxo de trabalho, esta versão inclui fluxos de trabalho da Máquina de Estado e serviços de fluxo de trabalho de primeiro contrato.

Fluxo de trabalho de máquina de estado

Os fluxos de trabalho do computador de estado foram introduzidos como parte do .NET Framework 4, versão 4.0.1 no Microsoft .NET Framework 4 Platform Update 1. Essa atualização incluiu várias novas classes e atividades que permitiram que os desenvolvedores criassem fluxos de trabalho de computador de estado. Essas classes e atividades foram atualizadas para o .NET Framework 4.5. As atualizações incluem:

  1. A capacidade de definir pontos de interrupção em estados

  2. A capacidade de copiar e colar transições no designer de fluxo de trabalho

  3. Suporte de designer para criação de transição do disparador compartilhado

  4. Atividades usadas para criar fluxos de trabalho do State Machine, incluindo: StateMachine, Statee Transition

A captura de tela a seguir mostra o fluxo de trabalho do computador de estado concluído da etapa Tutorial de IntroduçãoComo criar um fluxo de trabalho do computador de estado.

Ilustração que mostra o fluxo de trabalho da máquina de estado concluído.

Para obter mais informações sobre como criar fluxos de trabalho de computador de estado, consulte State Machine Workflows.

Desenvolvimento de fluxo de trabalho de primeiro contrato

A ferramenta de desenvolvimento de fluxo de trabalho com definição de contratos primeiro permite ao desenvolvedor inicialmente definir um contrato no código e, em seguida, com alguns cliques no Visual Studio, gerar automaticamente um modelo de atividade na caixa de ferramentas que representa cada operação. Essas atividades são então usadas para criar um fluxo de trabalho que implementa as operações definidas pelo contrato. O designer de fluxo de trabalho validará o serviço de fluxo de trabalho para garantir que essas operações sejam implementadas e que a assinatura do fluxo de trabalho corresponda à assinatura do contrato. O desenvolvedor 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 primeiro serviço de fluxo de trabalho do contrato, consulte Como criar um serviço de fluxo de trabalho que consome um contrato de serviço existente.