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 No Obtém ou define o tipo de contrato de retorno de chamada quando o contrato é do tipo duplex. (N/D)
ConfigurationName No Obtém ou define o nome usado para localizar o serviço em um arquivo de configuração do aplicativo. (N/D)
HasProtectionLevel 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
ProtectionLevel Sim Especifica se a associação para o contrato deve oferecer suporte ao valor da propriedade ProtectionLevel. Receive.ProtectionLevel deve corresponder.
SessionMode No Obtém ou define se as sessões são permitidas, não são permitidas ou são necessárias. (N/D)
TypeId No 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 No 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)
HasProtectionLevel 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 No 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 No 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.
ProtectionLevel 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.
ReplyAction 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 No 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
HasProtectionLevel 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).
ProtectionLevel No 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 No 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 No 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 No 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
HasProtectionLevel No Obtém um valor que indica se a mensagem de falha de SOAP tem um nível de proteção atribuído. (N/D)
Name No Obtém ou define o nome da mensagem de falha na linguagem WSDL. (N/D)
Namespace No Obtém ou define o namespace da falha de SOAP. (N/D)
ProtectionLevel No Especifica o nível de proteção que a falha de SOAP exige da associação. (N/D)
TypeId No 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 Faults FaultDescriptionCollection.

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.