Especificidades do recurso do Windows Workflow Foundation
O .NET Framework 4 adiciona vários recursos ao Windows Workflow Foundation. Este documento descreve uma série de novos recursos e fornece detalhes sobre cenários nos quais eles podem ser úteis.
Atividades de mensagens
As atividades de mensagens (Receive, SendReply, Send, ReceiveReply) são usadas para enviar e receber mensagens WCF do seu fluxo de trabalho. Receive e SendReply as atividades são usadas para formar uma operação de serviço do Windows Communication Foundation (WCF) que é exposta via WSDL assim como os serviços Web WCF padrão. Send e ReceiveReply são usados para consumir um serviço Web semelhante a um WCF ChannelFactory; uma experiência Adicionar Referência de Serviço também existe para o Workflow Foundation que gera atividades pré-configuradas.
Introdução às atividades de mensagens
No Visual Studio 2012, crie um projeto WCF Workflow Service Application. Um Receive e SendReply par serão colocados na sua tela.
Clique com o botão direito do mouse 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.
Cenário de exemplo de atividades de mensagens
Um BestPriceFinder
serviço recorre a várias companhias aéreas para encontrar o melhor preço do bilhete para uma determinada rota. A implementação desse cenário exigiria que você usasse as atividades de mensagem para receber a solicitação de preço, recuperar os preços dos serviços de 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 para calcular o melhor preço.
WorkflowServiceHost
O WorkflowServiceHost é o host de fluxo de trabalho pronto para uso que oferece suporte a várias instâncias, configuração e mensagens WCF (embora os fluxos de trabalho não sejam obrigados a usar mensagens para serem hospedados). Ele também se integra com persistência, rastreamento e controle de instância por meio de um conjunto de comportamentos de serviço. Assim como o ServiceHostWCF, o WorkflowServiceHost pode ser auto-hospedado em um aplicativo de console/WinForms/WPF ou serviço do Windows, ou hospedado na Web (como um arquivo .xamlx) no IIS ou WAS.
Introdução ao Host de Serviço de Fluxo de Trabalho
No Visual Studio 2010, crie um projeto WCF Workflow Service Application: este projeto será configurado para uso WorkflowServiceHost em um ambiente de host da Web.
Para hospedar um fluxo de trabalho que não seja de mensagens, adicione um personalizado WorkflowHostingEndpoint que criará a instância com base em uma mensagem.
As instâncias de fluxo de trabalho podem ser controladas (por exemplo, suspensas ou encerradas) adicionando um WorkflowControlEndpoint ao e, em seguida, WorkflowServiceHost usando um WorkflowControlClientarquivo .
Exemplos para o WorkflowServiceHost podem ser encontrados nas seguintes seções:
Aplicativo: Gerenciamento de instância suspenso
Cenário WorkflowServiceHost
Um serviço BestPriceFinder recorre a vários serviços de companhias aéreas para encontrar o melhor preço de bilhete para uma rota específica. A implementação desse cenário exigiria que você hospedasse o fluxo de trabalho no WorkflowServiceHost. Ele também usaria as atividades de mensagem para receber a solicitação de preço, recuperar os preços dos serviços de back-end e responder à solicitação de preço com o melhor preço.
Correlação
Uma correlação é uma de duas coisas:
Uma forma de agrupar mensagens; ou seja, a relação entre uma mensagem de solicitação e sua resposta.
Uma maneira de mapear uma parte dos dados para uma instância de serviço
Introdução
Para começar com a correlação, crie um novo projeto no Visual Studio. Crie uma variável do tipo CorrelationHandle.
Um exemplo de correlação usada para agrupar mensagens é uma correlação Request-Reply que agrupa mensagens.
Em uma Receive atividade, clique na CorrelationInitializers propriedade e adicione uma RequestReplyCorrelationInitializer usando o CorrelationHandle criado na primeira etapa acima.
Crie uma SendReply atividade clicando com o botão direito do Receive mouse no botão e clicando em "Criar SendReply". Cole no seu fluxo de trabalho após a Receive atividade.
Um exemplo de mapeamento de uma parte de dados para uma instância de serviço é a correlação baseada em conteúdo que mapeia uma parte de dados (por exemplo, uma ID de ordem) para uma instância de fluxo de trabalho específica.
- Em qualquer atividade de mensagens, clique na
CorrelationInitializers
propriedade e adicione uma QueryCorrelationInitializer usando a CorrelationHandle variável criada acima. Clique duas vezes na propriedade desejada na mensagem (por exemplo, OrderID) no menu suspenso. Defina aCorrelatesWith
propriedade para a CorrelationHandle variável usada acima.
- Em qualquer atividade de mensagens, clique na
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 e WorkflowServiceHost usasse as atividades de mensagens. Também exigiria correlação com base no orderId
para garantir que as atualizações sejam feitas no fluxo de trabalho correto.
Configuração simplificada
O esquema de configuração do WCF é complexo e fornece aos usuários muitos recursos difíceis de encontrar. No .NET Framework 4.6.1, nos concentramos em ajudar os usuários do WCF a configurar seus serviços com os seguintes recursos:
Eliminando a necessidade de configuração explícita por serviço. Se você não configurar nenhum <elemento de serviço> para seu serviço e seu serviço não definir programaticamente nenhum ponto de extremidade, um conjunto de pontos de extremidade será adicionado automaticamente ao seu serviço, um por endereço base de serviço e por contrato implementado pelo seu serviço.
Permite que o usuário defina valores padrão para associações e comportamentos WCF, que serão aplicados a serviços sem 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 das propriedades do ponto de extremidade (endereço, vinculação e contrato) e permitem definir propriedades personalizadas.
Finalmente, o permite que você faça o gerenciamento central da configuração do cliente WCF, útil em cenários em que a ConfigurationChannelFactory<TChannel> configuração é selecionada ou alterada após o tempo de carregamento do domínio do aplicativo.
Introdução
Cenários de configuração simplificados
Um desenvolvedor ASMX experiente deseja começar a usar o WCF. No entanto, WCF parece muito complicado! Quais são todas as informações que eu preciso para escrever em um arquivo de configuração? No .NET 4, você pode até decidir não ter um arquivo de configuração.
Um conjunto existente de serviços WCF é muito difícil de configurar e manter. O arquivo de configuração tem milhares de linhas de código XML que são extremamente perigosas de tocar. É necessária ajuda para reduzir essa quantidade de código para algo mais gerenciável.
Resolvedor de Contrato de Dados
No .NET Framework 3.5, havia algumas limitações no design de tipos conhecidos:
Não foi possível adicionar tipos conhecidos dinamicamente, durante a serialização ou desserialização.
Os serializadores não podiam lidar com informações xsi:type desconhecidas.
Não foi possível para os usuários especificar qual xsi:type eles gostariam que aparecesse no fio para, por exemplo, tornar o tamanho de uma instância de serialização no fio menor.
O DataContractResolver resolve esses problemas no .NET Framework 4.5.
Introdução
Exemplos:
Cenários de resolução de contratos de dados
Evitar ter que declarar dezenas de KnownTypeAttribute objetos em um serviço.
Reduzindo o tamanho do blob XML.
Fluxograma
Fluxograma é um paradigma bem conhecido para representar visualmente problemas de domínio. É um novo estilo de fluxo de controle que estamos introduzindo no .NET Framework 4. Uma característica central do Fluxograma é que apenas uma atividade é executada em um determinado momento. Os fluxogramas podem expressar loops e resultados alternativos, mas não podem expressar nativamente a execução simultânea de vários nós.
Introdução
No Visual Studio 2012, crie um aplicativo de console de fluxo de trabalho. Adicione um fluxograma no designer de fluxo de trabalho.
O recurso de fluxograma usa as seguintes classes:
Exemplos:
Documentação do designer:
Cenários de fluxograma
Uma atividade de fluxograma pode ser usada para implementar um jogo de adivinhação. O jogo de adivinhação é muito simples: o computador seleciona um número aleatório e o jogador tem que adivinhar esse número. Quando o jogador envia cada palpite, o computador mostra-lhe uma dica (ou seja, "tente um número mais baixo"). Se o jogador encontrar o número em menos de 7 tentativas, receberá um parabéns especial do computador. Este jogo pode ser implementado com uma combinação das seguintes atividades processuais:
Atividades processuais (Sequence, If, ForEach, Switch, Assign, DoWhile, While)
As atividades processuais fornecem um mecanismo para modelar o fluxo de controle sequencial usando conceitos que são familiares aos programadores. Essas atividades permitem construções de linguagem de programação tradicionalmente estruturadas e, quando apropriado, fornecem paridade de linguagem com linguagens processuais comuns, como C# e Visual Basic.
Introdução
No Visual Studio 2012, crie um aplicativo de console de fluxo de trabalho. Adicione atividades processuais no designer de fluxo de trabalho.
Exemplos:
Documentação do designer:
Cenários de atividade processual
Parallel: Um sistema de gerenciamento de documentos da intranet tem um fluxo de trabalho de aprovação de documentos. Os documentos têm de ser aprovados por pessoas de vários departamentos antes de poderem ser publicados na intranet. Não há uma ordem estabelecida para as aprovações; 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, o administrador da intranet e o gerente de comunicações internas.
ParallelForEach<T>: Um aplicativo WF gerencia compras corporativas dentro de uma grande empresa. As regras corporativas determinam que, antes de planejar qualquer operação de compra, é necessária a avaliação de três fornecedores diferentes. Um funcionário do departamento de compras seleciona três fornecedores da lista de fornecedores da empresa. Depois que esses fornecedores forem selecionados e notificados, a empresa aguardará suas propostas econômicas. As propostas podem vir em qualquer ordem. Para implementar este cenário na WF, usamos um ParallelForEach<T> que irá iterar através da nossa coleção de fornecedores e pedir suas propostas econômicas. Depois de reunidas todas as ofertas, a melhor é selecionada e exibida.
InvokeMethod
A InvokeMethod atividade permite invocar métodos públicos em objetos ou tipos no escopo. Ele suporta a invocação de instância e métodos estáticos com ou sem parâmetros (incluindo matrizes de parâmetros) e métodos genéricos. Ele também permite executar o método de forma síncrona e assíncrona.
Introdução
No Visual Studio 2012, crie um aplicativo de console de fluxo de trabalho. Adicione uma InvokeMethod atividade no designer de fluxo de trabalho e configure métodos estáticos e de instância nele.
Documentação do Designer: InvokeMethod Activity Designer
Cenários InvokeMethod
Um método em um objeto no escopo precisa ser invocado. Por exemplo, um valor precisa ser adicionado a um dicionário. O método Add da instância do dicionário é invocado e a chave e o valor são fornecidos.
Um método precisa ser invocado em um objeto CLR herdado. Em vez de criar uma atividade personalizada para encapsular a chamada para essa classe herdada, se ela estiver no escopo durante a execução do fluxo de trabalho, InvokeMethod pode ser usada.
Atividades de tratamento de erros
A TryCatch atividade fornece um mecanismo para capturar exceções que ocorrem durante a execução de um conjunto de atividades contidas (semelhante à construção Try/Catch em C# e Visual Basic). TryCatch fornece tratamento de exceções no nível do fluxo de trabalho. Quando uma exceção não tratada é lançada, o fluxo de trabalho é anulado e o bloco Finalmente não será executado. Esse comportamento é consistente com C#.
Introdução
No Visual Studio 2012, crie um aplicativo de console de fluxo de trabalho. Adicione uma TryCatch atividade no designer de fluxo de trabalho.
Exemplo: Tratamento de falhas em uma atividade de fluxograma usando o TryCatch
Documentação do designer: Designers de atividade de manipulação de erros
Cenários de tratamento de erros
Um conjunto de atividades precisa ser executado e uma lógica específica precisa ser executada quando ocorre um erro. Se durante essa lógica de tratamento de erros for encontrado que o erro não é recuperável, a exceção será relançada e a atividade pai (ou o host) lidará com o problema.
Selecionar atividade
A Pick atividade fornece modelagem de fluxo de controle baseada em eventos em WF. Pick Contém muitas ramificações onde cada ramificação aguarda a ocorrência de um evento específico antes de ser executada. Nessa configuração, um Pick se comporta de forma semelhante a um Switch<T> ao qual a Atividade executará apenas um do conjunto de eventos que está escutando. Cada ramificação é orientada por eventos e o evento que ocorre executa a ramificação correspondente primeiro. Todas as outras filiais cancelam e param de ouvir eventos.
Introdução
No Visual Studio 2012, crie um aplicativo de console de fluxo de trabalho. Adicione uma Pick atividade no designer de fluxo de trabalho.
Exemplo: Usando a atividade de seleção
Documentação do designer: Escolher designer de atividade
Escolher cenário
Um usuário precisa ser solicitado a entrar. 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 insira algo. Nesse cenário, um tempo limite é necessário para desbloquear uma atividade de bloqueio. Um cenário comum é aquele que requer que uma tarefa seja concluída dentro de uma determinada duração de tempo. Cronometrar uma atividade de bloqueio é um cenário em que o Pick agrega muito valor.
Serviço de roteamento WCF
O Serviço de Roteamento foi projetado para ser um roteador de software genérico que permite controlar como as mensagens 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 das configurações que você pode suportar e a flexibilidade que você tem ao considerar como hospedar seus serviços. No .NET Framework 3.5, clientes e serviços estavam fortemente acoplados; Um cliente tinha que saber sobre todos os serviços com os quais precisava falar e onde eles estavam localizados. Além disso, o WCF no .NET Framework 3.5 tinha as seguintes limitações:
O tratamento de erros era complexo, pois essa lógica tinha que ser codificada no cliente.
Os clientes e os serviços tinham de utilizar sempre as mesmas ligações.
Os serviços raramente foram bem considerados: é mais fácil fazer com que o cliente fale com um serviço que implementa tudo, em vez de precisar escolher entre vários serviços.
O serviço de roteamento no .NET 4 foi projetado para facilitar a solução desses problemas. O novo serviço de roteamento tem os seguintes recursos:
Roteamento baseado em conteúdo (MessageFilter objetos examinam uma mensagem para determinar para onde ela deve ser enviada.)
Ponte de protocolo (transporte & mensagem)
Tratamento de erros (o roteador captura exceções de comunicação e faz failover para pontos de extremidade de backup)
Atualização dinâmica (na memória) e configuração de MessageFilterTable<TFilterData> roteamento.
Introdução
Documentação: Roteamento
Exemplos: Serviços de roteamento [Exemplos WCF]
Blog: Regras de roteamento!
Cenários de Encaminhamento
O serviço de roteamento é útil nos seguintes cenários:
Os clientes podem falar com vários serviços sem ter que se dirigir a todos eles diretamente.
Os clientes podem executar lógica adicional em uma solicitação de cliente para determinar para onde encaminhá-la
Decomponha as operações que um cliente executa em várias implementações de serviço sem refatorar o cliente.
Clientes e serviços podem falar diferentes ligações com diferentes configurações de segurança.
Os clientes podem ser habilitados para serem mais robustos contra falhas ou indisponibilidade de serviços.
Descoberta do WCF
O WCF Discovery é uma tecnologia de estrutura que permite incorporar um mecanismo de descoberta à infraestrutura do aplicativo. Você pode usar isso para tornar seu serviço detetável e configurar seus clientes para pesquisar serviços. Os clientes não precisam mais ser codificados com endpoint, tornando seu aplicativo mais robusto e tolerante a falhas. O Discovery é a plataforma perfeita para criar recursos de configuração automática em seu aplicativo.
O produto é construído com base no padrão WS-Discovery. Foi concebido para ser interoperável, extensível e genérico. O produto suporta dois modos de operação:
Gerido: quando existe uma entidade na rede com conhecimento sobre os serviços existentes, os clientes consultam-na diretamente para obter informações. Isso é análogo ao Ative Directory.
Ad-hoc: onde os clientes usam mensagens multicast para localizar serviços.
Além disso, as mensagens de descoberta são agnósticas de protocolo de rede; Você pode usá-los em cima de qualquer protocolo que suporte os requisitos de modo. Por exemplo, as mensagens de multicast de descoberta podem ser enviadas pelo canal UDP ou qualquer outra rede que ofereça suporte a mensagens multicast. Esses pontos de design, combinados com a flexibilidade de recursos, permitem que você adapte a descoberta especificamente à sua solução.
Introdução
Documentação: WCF Discovery
Exemplos: Descoberta (Amostras)
Cenários de descoberta
Um desenvolvedor não quer codificar endpoints, pois não se sabe quando meu serviço estará disponível. Em vez disso, o desenvolvedor deseja escolher um serviço em tempo de execução. É necessário mais desacoplamento, robustez e configuração automática entre os componentes do aplicativo.
Monitorização
O acompanhamento do fluxo de trabalho fornece informações sobre a execução de uma instância de fluxo de trabalho. Os eventos de controle 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 rastreamento de fluxo de trabalho precisa ser adicionado ao host do fluxo de trabalho para assinar registros de controle. Os registros de rastreamento são filtrados usando um perfil de rastreamento. O .NET Framework fornece um participante de rastreamento ETW (Event Tracing for Windows) e um perfil básico é instalado no arquivo machine.config.
Introdução
No Visual Studio 2010, crie um projeto WCF Workflow Service Application. Um Receive e SendReply par serão colocados na sua tela para começar.
Abra o web.config e adicione um comportamento de rastreamento ETW sem perfil.
O perfil padrão é usado.
Abra o visualizador de eventos e habilite o canal analítico no seguinte nó: Visualizador de Eventos, Logs de Aplicativos e Serviços, Microsoft, Windows, Application Server-Applications. Clique com o botão direito do mouse em Analítico e selecione Ativar Log.
Execute o serviço de fluxo de trabalho.
Observe os eventos de acompanhamento do fluxo de trabalho no visualizador de eventos.
Amostras: Rastreamento
Documentação conceptual: Workflow Tracking and Tracing
Repositório de instâncias do fluxo de trabalho SQL
O SqlWorkflowInstanceStore é uma implementação baseada no SQL Server de um repositório de instâncias. Um armazenamento de instâncias armazena o estado de uma instância em execução juntamente com todos os dados necessários para carregar e retomar essa instância. O host de serviço instrui o armazenamento de instâncias a salvar o estado da instância se o fluxo de trabalho persistir e instrui o armazenamento de instâncias a carregar o estado da instância quando uma mensagem chegar para essa instância ou uma atividade de atraso expirar.
Introdução
No Visual Studio 2012, crie um fluxo de trabalho que contenha uma atividade implícita ou explícita Persist . Adicione o SqlWorkflowInstanceStore comportamento ao seu host de serviço de fluxo de trabalho. Isso pode ser feito no código ou no arquivo de configuração do aplicativo.
Amostras: Persistência
Documentação conceitual: SQL Workflow Instance Store.