Partilhar via


Desenvolvimento do Serviço de Fluxo de Trabalho Contract First

A partir do .NET Framework 4.5, o Windows Workflow Foundation (WF) apresenta uma melhor integração entre serviços Web e fluxos de trabalho na forma de desenvolvimento de fluxo de trabalho contratual primeiro. A ferramenta de desenvolvimento de fluxo de trabalho contract-first permite que você projete o contrato em código primeiro. Em seguida, a ferramenta 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 propriedades em um serviço de fluxo de trabalho são mapeadas 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 com contrato primeiro, consulte Como criar um serviço de fluxo de trabalho que consuma um contrato de serviço existente.

Neste tópico

Mapeando atributos de contrato de serviço para atributos de fluxo de trabalho

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

Atributos do contrato de serviço

Nome de Propriedade Suportado Description Validação WF
CallbackContrato Não Obtém ou define o tipo de contrato de retorno de chamada quando o contrato é um contrato duplex. (N/A)
ConfigurationName Não Obtém ou define o nome usado para localizar o serviço em um arquivo de configuração do aplicativo. (N/A)
HasProtectionLevel Sim Obtém um valor que indica se o membro tem um nível de proteção atribuído. Receive.ProtectionLevel não deve ser null.
Nome Sim Obtém ou define o nome para o <elemento portType> no WSDL (Web Services Description Language). Receive.ServiceContractName.LocalName deve corresponder.
Espaço de Nomes Sim Obtém ou define o <namespace do elemento portType> no WSDL (Web Services Description Language). Receive.ServiceContractName.NameSpace deve corresponder
Nível de proteção Sim Especifica se a vinculação para o contrato deve suportar o 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 permitidas ou necessárias. (N/A)
TypeId Não Quando implementado em uma classe derivada, obtém um identificador exclusivo para esse atributo. (Herdado do Atributo.) (N/A)

Insira o corpo da subsecção aqui.

Atributos do contrato de operação

Nome de Propriedade Suportado Description Validação 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/A)
HasProtectionLevel Sim Obtém um valor que indica se as mensagens para esta operação devem ser criptografadas, assinadas ou ambas. Receive.ProtectionLevel não deve ser null.
IsIniciando 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/A)
IsOneWay Sim Obtém ou define um valor que indica se uma operação retorna uma mensagem de resposta. (Sem SendReply para este Receive OU sem ReceiveReply para este Send).
IsTerminating Não Obtém ou define um valor que indica se a operação de serviço faz com que o servidor feche a sessão após o envio da mensagem de resposta, se houver. (N/A)
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 ambas. Receive.ProtectionLevel deve corresponder.
ReplyAction Sim Obtém ou define o valor da ação 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 esse atributo. (Herdado do Atributo.) (N/A)

Atributos do contrato de mensagem

Nome de Propriedade Suportado Description Validação WF
HasProtectionLevel Sim Obtém um valor que indica se a mensagem tem um nível de proteção. Nenhuma validação (Receive.Content e SendReply.Content devem corresponder ao tipo de contrato de mensagem).
IsWrapped Sim Obtém ou define um valor que especifica se o corpo da mensagem tem um elemento wrapper. Nenhuma validação (Receive.Content e Sendreply.Content devem corresponder ao tipo de 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 ambas. (N/A)
TypeId Sim Quando implementado em uma classe derivada, obtém um identificador exclusivo para esse atributo. (Herdado do Atributo.) Nenhuma validação (Receive.Content e SendReply.Content devem corresponder ao tipo de contrato de mensagem).
Nome do Wrapper Sim Obtém ou define o nome do elemento wrapper do corpo da mensagem. Nenhuma validação (Receive.Content e SendReply.Content devem corresponder ao tipo de contrato de mensagem).
WrapperNamespace Não Obtém ou define o namespace do elemento wrapper do corpo da mensagem. (N/A)

Atributos do contrato de dados

Nome de Propriedade Suportado Description Validação WF
IsReference Não Obtém ou define um valor que indica se os dados de referência de objeto devem ser preservados. (N/A)
Nome Sim Obtém ou define o nome do contrato de dados para o tipo. Nenhuma validação (Receive.Content e SendReply.Content devem corresponder ao tipo de contrato de mensagem).
Espaço de Nomes Sim Obtém ou define o namespace para o contrato de dados para o tipo. Nenhuma validação (Receive.Content e SendReply.Content devem corresponder ao tipo de contrato de mensagem).
TypeId Não Quando implementado em uma classe derivada, obtém um identificador exclusivo para esse atributo. (Herdado do Atributo.) (N/A)

Atributos do contrato de falha

Nome de Propriedade Suportado Description Validação WF
Ação Sim Obtém ou define a ação da mensagem de falha SOAP 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 Não Obtém um valor que indica se a mensagem de falha SOAP tem um nível de proteção atribuído. (N/A)
Nome Não Obtém ou define o nome da mensagem de falha em WSDL (Web Services Description Language). (N/A)
Espaço de Nomes Não Obtém ou define o namespace da falha SOAP. (N/A)
Nível de proteção Não Especifica o nível de proteção que a falha SOAP requer da ligação. (N/A)
TypeId Não Quando implementado em uma classe derivada, obtém um identificador exclusivo para esse atributo. (Herdado do Atributo.) (N/A)

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

Recursos de contrato de serviço sem suporte

  • Não há suporte para o uso de tarefas TPL (Task Parallel Library) em contratos.

  • Não há suporte para herança em contratos de serviço.

Geração de atividades de mensagens configuradas

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

A atividade gerada por esses métodos deve passar na validação do contrato e, portanto, esses métodos são usados internamente como parte da lógica de validação para Receive e SendReply. O OperationName, ServiceContractName, Action, , SerializerOption, ProtectionLevele 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 tratados retornando um conjunto separado de atividades configuradas SendReply para cada uma das falhas que aparecem no Faults FaultDescriptionCollection.

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