Novidades no Windows Workflow Foundation no .NET Framework 4.5

O Windows Workflow Foundation (WF) no .NET Framework 4.5 apresenta muitos novos recursos, como novas atividades, recursos de designer e modelos de desenvolvimento de fluxo de trabalho. Muitos, mas não todos, os 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 os novos recursos com suporte, veja Suporte para novos recursos do Workflow Foundation 4.5 no Designer de Fluxo de Trabalho Hospedado novamente. Para obter mais informações sobre como migrar aplicativos de fluxo de trabalho .NET Framework 3.0 e .NET Framework 3.5 para usar a versão mais recente, consulte Orientação 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 destinado 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 pela mensagem O valor foi definido em XAML.
  • Muitos erros de compilação ocorrerão, incluindo o seguinte.

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

Controle de versão de fluxo de trabalho

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

Atividades

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

Escopo do NoPersist

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

Novos recursos de fluxograma

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

  • A propriedade DisplayName de uma atividade FlowSwitch<T> ou FlowDecision é editável. Isso permitirá que o designer de atividade 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 for definida como True, os nós de fluxograma desconectados gerarã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 a eles acesso completo aos recursos do host. Algumas preocupações sobre fluxos de trabalho em execução em confiança parcial são as seguintes:

  1. Usar os componentes legados (incluindo regras) contidos na atividade Interop não tem suporte em confiança parcial.

  2. Fluxos de trabalho em execução em confiança parcial no WorkflowServiceHost não têm suporte.

  3. Manter exceções em um cenário de confiança parcial é uma ameaça potencial de segurança. Para desabilitar a persistência de exceções, uma extensão do tipo ExceptionPersistenceExtension deve ser adicionada ao projeto para deixar de persistir 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 tiverem que ser 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 de fluxo de trabalho execute automaticamente a reflexão em relação ao tipo. Os argumentos e as atividades filho devem ser não null e Bind deve ser chamado explicitamente. Para obter mais informações sobre como substituir CacheMetadata, veja Expondo dados com CacheMetadata. Além disso, instâncias de argumentos que são de um tipo internal ou privado devem ser explicitamente criadas em CacheMetadata para evitar que sejam criadas por reflexão.

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

  6. Expressões que usam LambdaValue<TResult> exigem RestrictedMemberAccess e, dessa forma, não funcionarão em confiança parcial. Os fluxos de trabalho que usam LambdaValue<TResult> devem substituir essas expressões pelas atividades que derivam de CodeActivity<TResult>. .

  7. As expressões não podem ser criadas com TextExpressionCompiler ou o compilador hospedado do Visual Basic em confiança parcial, mas as expressões criadas anteriormente podem ser executadas.

  8. Um único assembly que usa a Transparência de Nível 2 não pode ser usado em .NET Framework 4, .NET Framework 4.6.1 em confiança total e .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 podem agora ser pesquisados por palavra-chave. Esse recurso está disponível somente no Visual Studio; este recurso não está disponível em um designer hospedado novamente. Há dois tipos de pesquisas disponível:

  • Localização rápida, iniciado com Ctrl+F ou Editar, Localizar e substituir, Localização rápida.

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

Observe que Substituir não tem suporte.

Localização Rápida

As palavras-chave pesquisadas em fluxos de trabalho corresponderão aos seguintes itens do designer:

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

Localizar em Arquivos

As palavras-chave pesquisadas em fluxos de trabalho coincidirão com o 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 de menu de contexto no designer de argumento e variável

No .NET Framework 4, as variáveis e os argumentos podem ser excluídos no designer apenas usando o teclado. Começando no .NET Framework 4.5, as variáveis e os argumentos podem ser excluídos usando o menu de contexto.

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

Menu de contexto do designer de argumento e variável

Envolvimento automático com sequência

Como um fluxo de trabalho ou algumas atividades do contêiner (como NoPersistScope) só podem conter uma única atividade do corpo, adicionar uma segunda atividade exigia que o desenvolvedor excluísse a primeira atividade, adicionasse uma atividade Sequence e, em seguida, adicionasse as duas atividades para a atividade de sequência. Começando no .NET Framework 4.5, ao adicionar uma segunda atividade à superfície do designer, uma atividade Sequence será criada automaticamente para agrupar 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 panorâmico

Para navegar mais facilmente um grande fluxo de trabalho no designer, o modo panorâmico 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 panorâmica qual 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 redor delas (quando o modo panorâmico não está habilitado), ou mantendo pressionada a tecla CTRL e clicando nas atividades desejadas.

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 essa exibição, no menu superior, selecione Exibir, Outras Janelas, Destaques 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 exibição de estrutura de tópicos com um fluxo de trabalho sequencial.

Captura de tela da exibição de estrutura de tópicos com um fluxo de trabalho sequencial no Visual Studio.

Expressões C#

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

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

Para obter mais informações sobre expressões C#, veja Expressões 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.5, essa personalização tem suporte apenas da 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 ShellHeaderItemsVisibility apropriado.

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 permite adicionar anotações para ajudar a controlar 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 para o designer.

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

Estados de depuração

No .NET Framework 4, os elementos que não são de atividade não podiam oferecer 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 objetos State. Quando um ponto de interrupção for definido em um State, a execução será interrompida quando ocorrer a transição do estado antes que suas atividades de entrada ou gatilhos sejam agendados.

Definir e consumir objetos ActivityDelegate no designer

As atividades no .NET Framework 4 usavam objetos ActivityDelegate para expor pontos de execução onde 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 representantes de atividade usando o designer de fluxo de trabalho. Para obter mais informações, confira Como definir e consumir delegados de atividade no Designer de Fluxo de Trabalho.

Validação de tempo de compilação

No .NET Framework 4 os erros de validação do fluxo de trabalho não eram contados como erros de compilação durante a compilação de um projeto de fluxo de trabalho. Isso significava que criar um projeto de fluxo de trabalho poderia ter êxito mesmo se houvesse erros de validação do fluxo de trabalho. No .NET Framework 4.5, os erros de validação do fluxo de trabalho causam a falha na compilação.

Validação em segundo plano do tempo de design

No .NET Framework 4, os fluxos de trabalho eram validados como um processo de primeiro plano, o que poderia 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, de modo que a interface do usuário não seja bloqueada.

Estado de exibição localizado em um local separado em arquivos XAML

No .NET Framework 4, as informações de estado de exibição para um fluxo de trabalho são armazenadas no arquivo XAML em muitos lugares diferentes. Isso é inconveniente para os desenvolvedores que desejam ler XAML diretamente, ou gravar código para remover informações de estado de exibição. No .NET Framework 4.5, as informações de estado da 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 completamente o estado da exibição.

Extensibilidade de expressão

No .NET Framework 4.5, fornecemos uma maneira para os desenvolvedores criarem suas próprias expressões e experiências de criação de expressões que podem ser conectadas 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 estã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 hospedado novamente, defina TargetFrameworkName como ".NET Framework 4.5" ou defina membros individuais do conjunto 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 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. Essa atualização incluiu várias novas classes e atividades que permitiram que os desenvolvedores criassem fluxos de trabalho de máquina do 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 da máquina de estado, incluindo: StateMachine, State e Transition.

A captura de tela a seguir mostra o fluxo de trabalho da máquina de estado concluído da etapa Como criar um fluxo de trabalho da máquina de estado do Tutorial de introdução.

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 da máquina de estado, veja Fluxos de trabalho da máquina de estado.

Desenvolvimento de fluxo de trabalho de primeiro contrato

A ferramenta de desenvolvimento de fluxo de trabalho de primeiro contrato permite que o desenvolvedor crie um contrato no código primeiro e, em seguida, com alguns cliques no Visual Studio, gere automaticamente um modelo de atividade na caixa de ferramentas representando 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 assegurar que essas operações sejam implementadas e 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 de serviços de fluxo de trabalho de primeiro contrato, consulte Como criar um serviço de fluxo de trabalho que consome um contrato de serviço existente.