Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O .NET Framework 4 adiciona uma série de recursos ao Windows Workflow Foundation. Este documento descreve vários dos novos recursos e fornece detalhes sobre cenários em que eles podem ser úteis.
Atividades de mensagens
As atividades de mensagens (Receive, SendReply, Send, ReceiveReply) são usadas para enviar e receber mensagens 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 semelhante a um WCF ChannelFactory; uma experiência de 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 de Aplicativo de Serviço de Fluxo de Trabalho do WCF. Um par de Receive e de SendReply será colocado na 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 consulta vários serviços de companhias aéreas para encontrar o melhor preço de passagem para uma rota específica. Implementar esse cenário exigiria que você 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. 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 persistência, rastreamento e controle de 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.
Primeiros Passos com o Host do Serviço de Fluxo de Trabalho
No Visual Studio 2010, crie um projeto de Aplicativo de Serviço de Fluxo de Trabalho do WCF: 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 uma WorkflowControlEndpoint ao WorkflowServiceHost e, em seguida, usando um WorkflowControlClient.
Exemplos para WorkflowServiceHost podem ser encontrados nas seguintes seções:
Aplicativo: Gerenciamento de Instância Suspensa
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. Implementar esse cenário exigiria que você hospedasse o fluxo de trabalho em 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 das duas coisas:
Uma maneira de agrupar mensagens; ou seja, a relação entre uma mensagem de solicitação e sua resposta.
Uma maneira de mapear um pedaço de dados para uma instância de serviço
Introdução
Para começar a usar a correlação, crie um novo projeto no Visual Studio. Criar 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 atividade de Receive, clique na propriedade de CorrelationInitializers e adicione um RequestReplyCorrelationInitializer usando o CorrelationHandle criado na primeira etapa anterior.
Crie uma atividade SendReply clicando com o botão direito em Receive e escolhendo "Create SendReply". Cole-o no fluxo de trabalho após a atividade de Receive .
Um exemplo de mapeamento de um pedaço de dados para uma instância de serviço é a correlação baseada em conteúdo que mapeia um pedaço de dados (por exemplo, uma ID de pedido) para uma instância de fluxo de trabalho específica.
- Em qualquer atividade de mensagens, clique na
CorrelationInitializerspropriedade e adicione um QueryCorrelationInitializer usando a CorrelationHandle variável criada acima. Clique duas vezes na propriedade desejada na mensagem (por exemplo, OrderID) no menu suspenso. Defina aCorrelatesWithpropriedade como 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 os pedidos existentes que estão em processo. 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 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:
Removendo a necessidade de 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 defina valores padrão para associações e comportamentos do 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 propriedades de ponto de extremidade (endereço, associação e contrato) e permitem definir propriedades personalizadas.
Finalmente, o ConfigurationChannelFactory<TChannel> permite que você faça o gerenciamento central da configuração do cliente WCF, útil em cenários nos quais a 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 experiente do ASMX deseja começar a usar o WCF. No entanto, o WCF parece muito complicado! Quais são todas essas informações que preciso gravar em um arquivo de configuração? No .NET 4, você pode até mesmo 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. Ajuda é necessária para reduzir essa quantidade de código para algo mais gerenciável.
Resolução do 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 conseguiram lidar com informações desconhecidas do tipo xsi:type.
Não era possível que os usuários especificassem qual xsi:type eles gostariam de ter exibido 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 do contrato de dados
Evitando ter que declarar dezenas de KnownTypeAttribute objetos em um serviço.
Reduzindo o tamanho do blob XML.
Fluxograma
O fluxograma é um paradigma 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 a qualquer 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 do 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 precisa adivinhar esse número. Quando o player envia cada palpite, o computador mostra uma dica (ou seja, "tente um número menor"). Se o jogador encontrar o número em menos de 7 tentativas, ele receberá um parabéns especial do computador. Este jogo pode ser implementado com uma combinação das seguintes atividades processuais:
Atividades procedurais (sequência, se, ForEach, alterne, atribui, DoWhile, quando)
As atividades processuais fornecem um mecanismo para modelar o fluxo de controle sequencial usando conceitos familiares aos programadores. Essas atividades permitem constructos de linguagem de programação tradicionalmente estruturados 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 ao 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 documento. Os documentos precisam ser aprovados por pessoas em vários departamentos antes que possam ser publicados na intranet. Não há uma ordem estabelecida para as aprovações; elas podem ocorrer a qualquer momento enquanto o documento estiver na fase "aprovação pendente". Quando um usuário envia um documento para revisão, ele deve ser aprovado pelo gerente direto, pelo administrador da intranet e pelo gerenciador de comunicações interno.
ParallelForEach<T>: um aplicativo WF gerencia compras corporativas em uma grande empresa. As regras corporativas determinam que, antes de planejar qualquer operação de compra, 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 forem selecionados e notificados, a empresa aguardará suas propostas econômicas. As propostas podem vir em qualquer ordem. Para implementar esse cenário no WF, usamos um ParallelForEach<T> que iterará por meio de nossa coleção de fornecedores e solicitaremos suas propostas econômicas. Depois que todas as ofertas forem coletadas, a melhor será selecionada e exibida.
InvokeMethod
A atividade InvokeMethod permite invocar métodos públicos em objetos ou tipos dentro do escopo. Ele dá suporte à invocação de métodos estáticos e de instância 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: 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. 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 legada, se ela estiver no escopo durante a execução do fluxo de trabalho, o InvokeMethod pode ser utilizado.
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 ao constructo Try/Catch em C# e Visual Basic). TryCatch fornece tratamento de exceção no nível do fluxo de trabalho. Quando uma exceção não tratada é lançada, o fluxo de trabalho é abortado e o bloco Finally 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 TryCatch
Documentação do Designer: Designers de Atividade de Tratamento 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 que se encontra o erro é não recuperável, a exceção será rethrown, e a atividade pai (ou o host) manipulará o problema.
Escolher atividade
A Pick Atividade fornece modelagem de fluxo de controle baseada em evento no WF. Pick contém muitas ramificações em que cada uma aguarda por um evento específico ocorrer antes de ser executada. Nesta configuração, um Pick se comporta de maneira semelhante a um Switch<T>, no qual a Atividade executará apenas um dos eventos que estiver escutando. Cada branch é controlado por eventos e o evento que ocorre executa o branch correspondente primeiro. Quaisquer outras ramificações cancelarem 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: Uso da atividade de separar
Documentação do designer: Designer da atividade de separar
Escolher Cenário
Um usuário precisa ser solicitado a inserir. 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 aguarda 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. Tempo para fora uma atividade de bloqueio é um cenário onde a picareta adicionar muito valor.
Serviço de Roteamento do WCF
O Serviço de Roteamento foi projetado para ser um roteador de software genérico que permite controlar como as mensagens do WCF fluem entre seus clientes e serviços. O Serviço de Roteamento permite que você desassocie seus clientes de seus serviços, o que lhe dá muito mais liberdade em termos das configurações que você pode dar suporte e à flexibilidade que você tem 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 que precisava para conversar 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 precisava ser codificada no cliente.
Os clientes e serviços tinham que sempre usar as mesmas associações.
Os serviços raramente eram bem estruturados: é mais fácil permitir que o cliente fale com um serviço que implemente todas as funcionalidades, 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 os objetos examinam uma mensagem para determinar para onde ela deve ser enviada.)
Ponte sobre protocolo (transporte & mensagem)
Tratamento de erros (o roteador captura exceções de comunicação e efetua o failover para pontos de extremidade alternativos)
(Na memória) atualização dinâmica de MessageFilterTable<TFilterData> e configuração de roteamento.
Introdução
Documentação: Roteamento
Exemplos: Serviços de Roteamento [Exemplos do WCF]
Blog: Regras de roteamento!
Cenários de roteamento
O serviço de roteamento é útil nos seguintes cenários:
Os clientes podem conversar com vários serviços sem precisar resolver todos eles diretamente.
Os clientes podem executar lógica adicional em uma solicitação de cliente para determinar para onde roteá-la
Decompor as operações que um cliente executa em várias implementações de serviço sem refatorar o cliente.
Os clientes e serviços podem falar associações diferentes com as configurações de segurança diferentes.
Os clientes podem ser habilitados para serem mais robustos contra falhas ou indisponibilidade de serviços.
Descoberta do WCF
A Descoberta do WCF é um framework tecnológico que permite incorporar um mecanismo de descoberta à infraestrutura do aplicativo. Você pode usá-lo para tornar seu serviço detectável e configurar seus clientes para pesquisar serviços. Os clientes não precisam ser codificados difícil com ponto final, fazendo seu aplicativo mais robusta e tolerante falha. A plataforma Discovery é perfeita para construir capacidades de configuração automática em seu aplicativo.
O produto é criado com base no padrão WS-Discovery. Ele foi projetado para ser interoperável, extensível e genérico. O produto dá suporte a dois modos de operação:
Gerenciado: onde há uma entidade na rede com conhecimento sobre os serviços existentes, os clientes a consultam diretamente para obter informações. Isso é análogo ao Active Directory.
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, as mensagens multicast de descoberta podem ser enviadas pelo canal UDP ou qualquer outra rede que dê 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: Descoberta do WCF
Exemplos: Descoberta (Exemplos)
Cenários de descoberta
Um desenvolvedor não deseja codificar rigidamente os endpoints, pois não se sabe quando o serviço estará disponível. Em vez disso, o desenvolvedor deseja escolher um serviço em runtime. É necessário mais desacoplamento, robustez e configuração automática entre os componentes no aplicativo.
Acompanhamento
O acompanhamento de fluxo de trabalho fornece insights 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
No Visual Studio 2010, crie um projeto de Aplicativo de Serviço de Fluxo de Trabalho do WCF. Um par de Receive e de SendReply será colocado na tela para o início.
Abra o web.config e adicionar um comportamento de rastreamento de ETW sem o 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 Analítico e selecione Habilitar Log.
Execute o serviço de fluxo de trabalho.
Observe os eventos de acompanhamento de fluxo de trabalho no visualizador de eventos.
Exemplos: Acompanhamento
Documentação conceitual: Acompanhamento e rastreamento de fluxo de trabalho
Repositório de Instâncias de Fluxo de Trabalho do SQL
SqlWorkflowInstanceStore é uma implementação de repositório de instâncias baseada em SQL Server. Um repositório de instância armazena o estado de uma instância em execução junto com todos os dados necessários para carregar e retomar essa instância. O host de serviço instrui o repositório de instâncias a salvar o estado da instância se o fluxo de trabalho persistir e instrui o repositório 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 comportamento SqlWorkflowInstanceStore ao host do serviço de fluxo de trabalho. Isso pode ser feito no código ou no arquivo de configuração do aplicativo.
Exemplos: Persistência
Documentação conceitual: Repositório de Instâncias de Fluxo de Trabalho do SQL.