Compartilhar via


Desenvolvimento de serviço de fluxo de trabalho de primeiro contrato

A partir do .NET Framework 4.5, o WF (Windows Workflow Foundation) apresenta melhor integração entre serviços Web e fluxos de trabalho na forma de desenvolvimento de fluxo de trabalho de primeiro contrato. A ferramenta de desenvolvimento de fluxo de trabalho de primeiro contrato permite que você crie o contrato no código primeiro. A ferramenta em seguida gera automaticamente um modelo de atividade na caixa de ferramentas para as operações no contrato. Este tópico fornece uma visão geral de como as atividades e as propriedades em um mapa do serviço de fluxo de trabalho para os atributos de um contrato de serviço. Para obter um exemplo passo a passo da criação de um serviço 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.

Neste tópico

Atributos de contrato de serviço de mapeamento para atributos de fluxo de trabalho

As tabelas nas seções a seguir especificam os atributos de WCF diferentes e as propriedades e como eles são mapeados para as atividades e as propriedades de mensagem em um fluxo de trabalho de primeiro contrato.

Atributos de contrato de serviço

Nome da propriedade Com suporte Descrição Validação de WF
CallbackContract Não Obtém ou define o tipo de contrato de retorno de chamada quando o contrato é do tipo duplex. (N/D)
Nome da Configuração Não Obtém ou define o nome usado para localizar o serviço em um arquivo de configuração do aplicativo. (N/D)
PossuiNívelDeProteção Sim Obtém um valor que indica se o membro tem um nível de proteção atribuído. Receive.ProtectionLevel não pode ser nulo.
Nome Sim Obtém ou define o nome do elemento <portType> na linguagem WSDL (Web Services Description Language). Receive.ServiceContractName.LocalName deve corresponder.
Namespace Sim Obtém ou define o namespace do elemento <portType> na linguagem WSDL (Web Services Description Language). Receive.ServiceContractName.NameSpace deve corresponder
Nível de Proteção Sim Especifica se a associação para o contrato deve oferecer suporte ao valor da propriedade ProtectionLevel. Receive.ProtectionLevel deve corresponder.
Modo de Sessão Não Obtém ou define se as sessões são permitidas, não são permitidas ou são necessárias. (N/D)
TypeId Não Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Atributo. (Herdada de atributo.) (N/D)

Inserir o corpo da subseção aqui.

Atributos de contrato de operação

Nome da propriedade Com suporte Descrição Validação de WF
Ação Sim Obtém ou define a ação WS-Addressing da mensagem de solicitação. Receive.Action deve corresponder.
AsyncPattern Não Indica que uma operação é implementada de forma assíncrona usando um par de métodos Begin<methodName> e End<methodName> em um contrato de serviço. (N/D)
PossuiNívelDeProteção Sim Obtém um valor que indica se as mensagens para essa operação devem ser criptografadas, assinadas ou ambos. Receive.ProtectionLevel não pode ser nulo.
IsInitiating Não Obtém ou define um valor que indica se o método implementa uma operação que pode iniciar uma sessão no servidor (se essa sessão existir). (N/D)
IsOneWay Sim Obtém ou define um valor que indica se uma operação retorna uma mensagem de resposta. (Nenhum SendReply para este Receive OR nenhum ReceiveReply para este Send).
IsTerminating Não Obtém ou define um valor que indica se a operação de serviço faz o servidor fechar a sessão depois que a mensagem de resposta, se houver, for enviada. (N/D)
Nome Sim Obtém ou define o nome da operação. Receive.OperationName deve corresponder.
Nível de Proteção Sim Obtém ou define um valor que especifica se as mensagens de uma operação devem ser criptografadas, assinadas ou ambos. Receive.ProtectionLevel deve corresponder.
Ação de Resposta Sim Obtém ou define o valor da ação de SOAP para a mensagem de resposta da operação. SendReply.Action deve corresponder.
TypeId Não Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Atributo. (Herdada de atributo.) (N/D)

Atributos de contrato de mensagem

Nome da propriedade Com suporte Descrição Validação de WF
PossuiNívelDeProteção Sim Obtém um valor que indica se a mensagem tem um nível de proteção. Sem validação (Receive.Content e SendReply.Content devem corresponder ao tipo do contrato de mensagem).
IsWrapped Sim Obtém ou define um valor que especifica se o corpo da mensagem tem um elemento wrapper. Sem validação (Receive.Content e Sendreply.Content devem corresponder ao tipo do contrato de mensagem).
Nível de Proteção Não Obtém ou define um valor que especifica se a mensagem deve ser criptografada, assinada ou ambos. (N/D)
TypeId Sim Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Atributo. (Herdada de atributo.) Sem validação (Receive.Content e SendReply.Content devem corresponder ao tipo do contrato de mensagem).
WrapperName Sim Obtém ou define o nome do elemento wrapper do corpo da mensagem. Sem validação (Receive.Content e SendReply.Content devem corresponder ao tipo do contrato de mensagem).
WrapperNamespace Não Obtém ou define o namespace do elemento wrapper do corpo da mensagem. (N/D)

Atributos de contrato de dados

Nome da propriedade Com suporte Descrição Validação de WF
IsReference Não Obtém ou define um valor que indica se deve preservar os dados de referência do objeto. (N/D)
Nome Sim Obtém ou define o nome do contrato de dados para o tipo. Sem validação (Receive.Content e SendReply.Content devem corresponder ao tipo do contrato de mensagem).
Namespace Sim Obtém ou define o namespace para o contrato de dados para o tipo. Sem validação (Receive.Content e SendReply.Content devem corresponder ao tipo do contrato de mensagem).
TypeId Não Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Atributo. (Herdada de atributo.) (N/D)

Atributos de contrato de falha

Nome da propriedade Com suporte Descrição Validação de WF
Ação Sim Obtém ou define a ação da mensagem de falha de SOAP que é especificada como parte do contrato de operação. SendReply.Action deve corresponder.
DetailType Sim Obtém o tipo de um objeto serializável que contém informações de erro. SendReply.Content deve corresponder ao tipo
PossuiNívelDeProteção Não Obtém um valor que indica se a mensagem de falha de SOAP tem um nível de proteção atribuído. (N/D)
Nome Não Obtém ou define o nome da mensagem de falha na linguagem WSDL. (N/D)
Namespace Não Obtém ou define o namespace da falha de SOAP. (N/D)
Nível de Proteção Não Especifica o nível de proteção que a falha de SOAP exige da associação. (N/D)
TypeId Não Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Atributo. (Herdada de atributo.) (N/D)

Informações adicionais de suporte e implementação

Recursos sem suporte do contrato de serviço

  • O uso de tarefas de TPL (Task Parallel Library) nos contratos não tem suporte.

  • A herança em contratos de serviço não tem suporte.

Geração de atividades configuradas de mensagem

Dois métodos estáticos públicos são adicionados às atividades Receive e SendReply para dar suporte à geração de atividades de mensagens pré-configuradas ao usar serviços de fluxo de trabalho de primeiro contrato.

A atividade gerada por esses métodos deve passar a validação do contrato e, consequentemente, esses métodos são usados internamente como parte da lógica de validação para Receive e SendReply. OperationName, ServiceContractName, Action, SerializerOption, ProtectionLevel e KnownTypes são todos pré-configurados para corresponder ao contrato importado. Na página de propriedades de conteúdo para as atividades no designer de fluxo de trabalho, as seções Mensagem ou Parâmetros também são pré-configuradas para corresponder ao contrato.

Os contratos de falha do WCF também são manipulados com o retorno de um conjunto separado de atividades SendReply configuradas para cada uma das falhas que aparecem na FaultsFaultDescriptionCollection.

Para outras partes de OperationDescription que não têm suporte pelos serviços do WF atualmente (por exemplo, comportamentos WebGet/WebInvoke ou comportamentos de operação personalizados), a API ignorará esses valores como parte da geração e da configuração. Nenhuma exceção será gerada.