Específicos de recurso do Windows Workflow Foundation

O .NET Framework 4 adiciona diversos recursos ao Windows Workflow Foundation. Este documento descreve um número de recursos novos, e fornece detalhes sobre cenários em que podem ser úteis.

Atividades de mensagem

As atividades de mensagens (Receive, SendReply, Send, ReceiveReply) são usadas para enviar e receber mensagens de WCF de seu fluxo de trabalho. As atividades Receive e SendReply são usadas para formar uma operação de serviço de WCF (Windows Communication Foundation) exposta por meio do WSDL, assim como os serviços Web padrão de WCF. Send e ReceiveReply são usados para consumir um serviço Web parecido com um WCF ChannelFactory; também há uma experiência Adicionar Referência de Serviço para Workflow Foundation que gera atividades pré-configuradas.

Guia de introdução com atividades de mensagem

  • No Visual Studio 2012, crie um projeto de Aplicativo de Serviço do WCF Workflow. Um par de Receive e de SendReply será colocado na tela.

  • Clique com o botão direito no projeto e selecione Adicionar Referência de Serviço. Aponte para um WSDL de serviço Web existente e clique em OK. Crie seu projeto para mostrar as atividades geradas (implementadas usando Send e ReceiveReply) em sua caixa de ferramentas.

  • Documentação dos serviços do Workflow

Cenário exemplo de atividades de mensagem

Um serviço BestPriceFinder chama vários serviços aéreos para encontrar o melhor preço de passagem para uma rota específica. A implementação desse cenário exigiria o uso de atividades de mensagem para receber a solicitação de preço, recuperar os preços dos serviços back-end e responder à solicitação de preço com o melhor preço. Também exigiria que você usasse outras atividades prontas para criar a lógica de negócios e calcular o melhor preço.

WorkflowServiceHost

WorkflowServiceHost é o host de fluxo de trabalho pronto para uso que tem suporte para várias instâncias, configuração e mensagens do WCF (embora os fluxos de trabalho não precisem usar mensagens para serem hospedados). Ele também se integra com controle de persistência, acompanhamento e instância por meio de um conjunto de comportamentos de serviço. Assim como o ServiceHost do WCF, o WorkflowServiceHost pode ser auto-hospedado em um aplicativo de console/WinForms/WPF ou no serviço Windows, ainda ou hospedado na Web (como um arquivo .xamlx) no IIS ou WAS.

Guia de introdução com host de Serviço de Fluxo de Trabalho

Cenário de WorkflowServiceHost

Um serviço BestPriceFinder chama vários serviços aéreos para encontrar o melhor preço de passagem para uma rota específica. A implementação desse cenário exigiria que você hospedasse o fluxo de trabalho em WorkflowServiceHost. Também usaria as atividades de mensagem para receber a solicitação de preço, recuperar os preços dos serviços back-end e responder à solicitação de preço com o melhor preço.

Correlation

Uma correlação é uma das duas coisas:

  • Uma maneira de mensagens de agrupamento juntos; ou seja, a relação entre uma mensagem de solicitação e sua resposta.

  • Uma maneira para mapear uma parte de dados a uma instância de serviço

Introdução

  • Para começar com correlação, crie um novo projeto no Visual Studio. Crie uma variável do tipo CorrelationHandle.

  • Um exemplo de correlação usado para agrupar mensagens seja adjacente uma correlação de solicitação de resposta que agrupe mensagens juntos.

  • Um exemplo de mapear uma parte de dados a uma instância do serviço é correlação conteudo base que mapeia um conjunto de dados (por exemplo, um ID de ordem) para uma determinada instância de fluxo de trabalho.

    • Em quaisquer atividades de mensagem, clique na propriedade de CorrelationInitializers e adicione QueryCorrelationInitializer usando a variável de CorrelationHandle criado anterior. Clique duas vezes na propriedade desejada na mensagem (por exemplo, OrderID) no menu suspenso. Defina a propriedade de CorrelatesWith à variável de CorrelationHandle usado anterior.
  • Documentação conceitual de correlação

Cenário de correlação

Um fluxo de trabalho de processamento de pedidos é usado para lidar com a criação de novos pedidos e atualizar pedidos existentes que estão em andamento. A implementação desse cenário exigiria que você hospedasse o fluxo de trabalho de WorkflowServiceHost e usasse as atividades de mensagens. Também exigiria a correlação com base na orderId para garantir que as atualizações fossem feitas no fluxo de trabalho correto.

Configuração simplificada

O esquema de configuração de WCF é complexo e fornece aos usuários muitos recursos difíceis de achar. No .NET Framework 4.6.1, nos concentramos em ajudar os usuários de WCF a configurar os serviços com os seguintes recursos:

  • Eliminando a necessidade para a configuração explícita por serviço. Se você não definir quaisquer elementos de <serviço> para o serviço, e o serviço não definir programaticamente qualquer ponto final, então um conjunto de pontos de extremidade será adicionado automaticamente ao serviço, um endereço básico de serviço e pelo contrato implementado pelo serviço.

  • Permite que o usuário para definir valores padrão para associações e comportamentos de WCF, que serão aplicados aos serviços sem a configuração explícita.

  • Os pontos de extremidade padrão definem pontos de extremidade pré-configurados reutilizáveis, que têm valores fixos para uma ou mais propriedades de ponto de extremidade (endereço, associação e contrato), e reservam-nos definir propriedades personalizadas.

  • Finalmente, ConfigurationChannelFactory<TChannel> permite que você faça o gerenciamento central da configuração do cliente de WCF, útil em cenários em que a configuração é selecionada ou alterada após o tempo de carregamento de domínio de aplicativo.

Introdução

Cenários simplificados de configuração

  • Um desenvolvedor ASMX experiente quer começar a usar WCF. No entanto, parece que WCF é muito complicado! Que é todas essas informações que eu preciso de gravar em um arquivo de configuração? Em .NET 4, você ainda pode decidir não ter um arquivo de configuração de qualquer.

  • Um conjunto existente de serviços WCF é muito difícil de configurar e manter. O arquivo de configuração possui milhares de linhas de código XML que são bastante perigosas para tocar. Ajuda é necessária para reduzir a quantidade de código para algo manejável.

Resolução do contrato de dados

No .NET Framework 3.5, havia algumas limitações no design de tipos conhecidos:

  • Adicionar tipos conhecidos dinamicamente, durante a serialização desserialização, ou não foi possível.

  • Os serializadores não pode manipular informações desconhecida de xsi:type .

  • Não foi possível que usuários especificar que xsi:type de deseja ou não ter aparecer no fio, por exemplo, faça o tamanho de uma instância de serialização no fio menor.

O DataContractResolver resolve esses problemas no .NET Framework 4.5.

Introdução

Cenários de resolução do contrato de dados

  • Evitar ter que declarar KnownTypeAttribute de dez objetos em um serviço.

  • Reduzindo o tamanho da operação XML.

Fluxograma

O fluxograma é um paradigma conhecido para representar visualmente problemas de domínio. É um novo estilo de fluxo de controle que estamos apresentando no .NET Framework 4. Uma característica principal do fluxograma é que apenas uma atividade é executada em um determinado momento. Os fluxogramas podem expressar loop e resultados alternativos, mas não podem expressar nativo a execução simultânea de vários nós.

Introdução

Cenários do fluxograma

Uma atividade do fluxograma pode ser usada para implementar um jogo de estimativa. O jogo de estimativa é muito simples: o computador seleciona um número aleatório e o jogador tem que descobrir esse número. Quando o jogador enviar cada estimativa, o computador mostrará uma dica (ou seja, "tente um número menor"). Se o jogador descobrir o número em menos de sete tentativas, receberá uma felicitação especial do computador. Esse kit pode ser implementado com uma combinação das seguintes atividades procedurais:

Atividades procedurais (sequência, se, ForEach, alterne, atribui, DoWhile, quando)

As atividades procedurais fornecem um mecanismo para o fluxo de controle em um modelo usando os conceitos que são familiares para programadores. Essas atividades permitem constructos de linguagem de programação estruturadas de forma tradicional e, quando apropriado, fornecem a paridade de linguagem com linguagens processuais comuns, como C# e Visual Basic.

Introdução

Cenários procedurais de atividades

  • Parallel: um sistema de gerenciamento de documentos em intranet tem um fluxo de trabalho de aprovação do documento. Documentos precisam ser aprovados por pessoas em vários departamentos antes que eles sejam publicado a intranet. Não há uma ordem estabelecida para as aprovações; elas podem ocorrer a qualquer momento enquanto o documento estiver na fase de "aprovação pendente". Quando um usuário envia um documento para revisão, ele deve ser aprovado por seu gerente direto, pelo administrador da intranet e pelo gerenciador interno de comunicação.

  • ParallelForEach<T>: Um aplicativo de WF gerencia compras corporativos dentro de uma grande empresa. As regras corporativos determina que planejando antes que qualquer operação de compras, as avaliações de três fornecedores diferentes são necessárias. Um funcionário do departamento de compra seleciona três fornecedores na lista de fornecedores da empresa. Depois que esses fornecedores foram selecionados e notificados, a empresa esperará suas propostas econômicas. As propostas podem vie em qualquer ordem. Para implementar esse cenário em WF, usamos ParallelForEach<T> que iterará através da coleção de fornecedores e solicitará suas propostas econômicas. As oferece são coletadas completos, melhor é selecionado e exibido.

InvokeMethod

A atividade de InvokeMethod reserva chamar métodos públicos em objetos ou no escopo. Suporta chamar métodos de instância e estática com ou sem parâmetros (que incluem matrizes de parâmetros), e métodos genéricos. Também permite executar o método forma síncrona e de forma assíncrona.

Introdução

  • No Visual Studio 2012, crie um aplicativo de console de fluxo de trabalho. Adicione uma atividade de InvokeMethod no designer de fluxo de trabalho, e configurar métodos estáticos e de instância nele.

  • Documentação do designer: Designer de Atividade InvokeMethod

Cenários de InvokeMethod

  • Um método em um objeto no escopo precisa ser chamado. Por exemplo, um valor precisa ser adicionado a um dicionário. Adicione o método de instância do dicionário é invocado, e a chave e o valor é fornecido.

  • Um método precisa ser chamado em um objeto CLR herdado. Em vez de criar uma atividade personalizado para envolver a chamada à classe herdado, se estiver no escopo durante a execução de fluxo de trabalho, InvokeMethod pode ser usado.

Atividades de tratamento de erro

A atividade TryCatch fornece um mecanismo para capturar exceções que ocorrem durante a execução de um conjunto de atividades contidas (semelhante ao constructo Try/Catch em C# e Visual Basic). TryCatch fornece tratamento de exceção a nível de fluxo de trabalho. Quando uma exceção sem tratamento é lançada, o fluxo de trabalho é anulado e o bloco Finally não é executado. Esse comportamento é consistente com o C#.

Introdução

Cenários de manipulação de erro

Um conjunto de atividades precisa ser executado, e a lógica específica precisa ser executada quando ocorre um erro. Se durante essa lógica de tratamento de erros que se encontra o erro é não recuperável, a exceção será rethrown, e a atividade pai (ou o host) manipulará o problema.

Atividade de picareta

A atividade de Pick fornece o fluxo de controle baseado em que modela WF. Pick contém várias ramificações onde cada ramificação espera um determinado evento ocorra antes de executar. Nessa configuração, Pick se comporta semelhante a Switch<T> que a atividade será executado somente de um conjunto de eventos que está escuta. Cada ramificação é causado evento e o evento que ocorre executa a ramificação correspondente primeiro. Quaisquer outras ramificações cancelarem e param de ouvir eventos.

Introdução

Cenário de picareta

Um usuário precisa ser solicitado para a entrada. Em circunstâncias normais, o desenvolvedor usaria uma chamada de método como ReadLine para solicitar a entrada de um usuário. O problema com essa configuração é que o programa espera até que o usuário digite algo. Nesse cenário, um tempo limite é necessário desbloquear uma atividade de bloqueio. Um cenário comum é um que requer uma tarefa ser concluído em uma determinada duração de tempo. Tempo para fora uma atividade de bloqueio é um cenário onde a picareta adicionar muito valor.

WCF que requer o serviço

O Serviço de Roteamento foi projetado para ser um roteador de software genérico que permite controlar como as mensagens de WCF fluem entre seus clientes e serviços. O Serviço de Roteamento permite que você desacople seus clientes de seus serviços, o que lhe dá muito mais liberdade em termos de configurações passíveis de suporte e de flexibilidade ao considerar como hospedar seus serviços. No .NET Framework 3.5, os clientes e os serviços estavam firmemente acoplados; um cliente tinha que saber sobre todos os serviços com os quais precisava conversar e onde estavam localizados. Além disso, o WCF no .NET Framework 3.5 tinha as seguintes limitações:

  • Manipulação de erro foi complexo, como essa lógica tinha que ser embutido no cliente.

  • Os clientes e serviços tinham que sempre usar as mesmas associações.

  • Os serviços foram raramente bom acrescentado: é mais fácil ter a conversa de cliente a um serviço que implementa todos, em vez de precisando de escolher entre vários serviços.

O serviço de roteamento no .NET 4 foi criado para facilitar a resolução desses problemas. O novo serviço de roteamento possui os seguintes recursos:

  1. O conteúdo do roteamento (os objetos deMessageFilter examinar uma mensagem para determinar onde deve ser enviada.)

  2. Ponte sobre protocolo (transporte e mensagem)

  3. Tratamento de erros (o roteador captura exceções de comunicação e efetua o failover para pontos de extremidade alternativos)

  4. (Na memória) atualização dinâmica de MessageFilterTable<TFilterData> e configuração de roteamento.

Introdução

  1. Documentação: Roteamento

  2. Exemplo: Serviços de roteamento [exemplos do WCF]

  3. Blog: Regras de roteamento!

Cenários de roteamento

O serviço de roteamento é útil nas seguintes situações:

  • Os clientes podem falar a vários serviços sem ter que evitá-los diretamente todos.

  • Os clientes podem executar lógica adicional em uma solicitação de cliente determinar onde rotear-la

  • Decompor as operações que um cliente é executado em várias implementações de serviço sem refatoração o cliente.

  • Os clientes e serviços podem falar associações diferentes com as configurações de segurança diferentes.

  • Os clientes podem ser ativados para ser mais robustos contra a falhar ou a indisponibilidade de serviços.

Descoberta de WCF

WCF Discovery é uma tecnologia de estrutura que permite que você incorpore um mecanismo de descoberta à infraestrutura do aplicativo. Você pode usar esse para fazer o serviço para descobrir, e configurar seus clientes para procurar pelos serviços. Os clientes não precisam ser codificados difícil com ponto final, fazendo seu aplicativo mais robusta e tolerante falha. A descoberta é a plataforma perfeita para compilar recursos de uma configuração em seu aplicativo.

O produto é construído sobre o padrão de WS- descoberta. Ela foi projetada para ser interoperável, extensível, e genérica. O modo de apoios ao produto dois de operação:

  1. Gerenciado: onde há uma entidade na rede conhecedoa sobre serviços existentes, os clientes consultar-la diretamente para informações. Isso é análogo a Ative Directory.

  2. Ad hoc: onde mensagens multicast de clientes usam localizar serviços.

Além disso, as mensagens de descoberta são protocolo de rede desconhecido; você pode usá-los em superior qualquer protocolo que oferecer suporte aos requisitos de modo. Por exemplo, é possível enviar mensagens multicast de descoberta pelo canal UDP ou qualquer outra rede que dê suporte à mensagem multicast. Esses pontos de design, combinados com a flexibilidade de recursos, permitem que você adapte a descoberta especificamente para a sua solução.

Introdução

Cenários de descoberta

Um desenvolvedor não deseja para pontos de extremidade difícil de código, desde que é conhecido quando serviço my estão disponíveis. Em vez disso, o desenvolvedor quer escolher um serviço em tempo de execução. Mais desacoplar, vigor, e uma configuração são necessários entre os componentes no aplicativo.

Acompanhamento

O rastreamento de fluxo de trabalho fornece informações sobre a execução de uma instância de fluxo de trabalho. Os eventos de rastreamento são emitidos de um fluxo de trabalho no nível da instância do fluxo de trabalho e quando as atividades dentro do fluxo de trabalho são executadas. Um participante de acompanhamento de fluxo de trabalho precisa ser adicionado ao host de fluxo de trabalho para assinar a acompanhar registros. Os registros de rastreamento são filtrados utilizando um perfil de rastreamento. O .NET Framework fornece um participante de rastreamento (Rastreamento de Eventos para Windows), e um perfil básico é instalado no arquivo machine.config.

Introdução

  1. No Visual Studio 2010, crie um projeto de Aplicativo de Serviço do WCF Workflow. Um par de Receive e de SendReply será colocado na tela para o início.

  2. Abra o web.config e adicionar um comportamento de rastreamento de ETW sem o perfil.

    1. O perfil padrão é usado.

    2. Abra o visualizador de eventos e permita o canal analítico no nó seguir: Visualizador de Eventos, Logs de Aplicativos e Serviços, Microsoft, Janelas, Servidor de aplicativo – Aplicativos. Clique com o botão direito do mouse em Analítico e selecione Habilitar Log.

    3. Execute o serviço de fluxo de trabalho.

    4. Observe os eventos de rastreamento de fluxo de trabalho no visualizador de eventos.

  3. Exemplos: Acompanhamento

  4. Documentação conceitual: Acompanhamento e rastreamento de fluxo de trabalho

Store instância de fluxo de trabalho do SQL

SqlWorkflowInstanceStore é uma implementação com base no servidor SQL de um armazenamento de instância. Um armazenamento de instância armazena o estado de uma instância em execução junto com todos os dados necessários carregar e continuar essa instância. O host serviço instrui o armazenamento de instância para salvar o estado da instância se o fluxo de trabalho persistir, e instrui o armazenamento de instância para carregar o estado da instância quando uma mensagem chega para essa instância ou uma atividade do atraso expira.

Introdução

  1. No Visual Studio 2012, crie um fluxo de trabalho que contenha uma atividade Persist implícita ou explícita. Adicionar o comportamento de SqlWorkflowInstanceStore ao seu host serviço de fluxo de trabalho. Isso pode ser feito no código ou no arquivo de configuração do aplicativo.

  2. Exemplos: Persistência

  3. Documentação conceitual: SQL Workflow Instance Store.