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.