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 Windows Communication Foundation (WCF) fornece opções altamente flexíveis para controlar o fluxo de transações. As configurações de fluxo de transação de um serviço podem ser expressas usando uma combinação de atributos e configuração.
Configurações de fluxo de transação
As configurações de fluxo de transação são geradas para um ponto de extremidade de serviço como resultado da interseção dos três valores a seguir:
O atributo TransactionFlowAttribute especificado para cada método no contrato de serviço.
A propriedade de associação
TransactionFlowna associação específica.A propriedade de associação
TransactionFlowProtocolna associação específica. ATransactionFlowProtocolpropriedade de associação permite que você escolha entre dois protocolos de transação diferentes que você pode usar para fluir uma transação. As seções a seguir descrevem brevemente cada uma delas.
Protocolo WS-AtomicTransaction
O protocolo WS-AtomicTransaction (WS-AT) é útil para cenários em que é necessária a interoperabilidade com pilhas de protocolos de terceiros.
Protocolo OleTransactions
O protocolo OleTransactions é útil para cenários em que a interoperabilidade com pilhas de protocolo de terceiros não é necessária e o implantador de um serviço sabe com antecedência que o serviço de protocolo WS-AT está desabilitado localmente ou a topologia de rede existente não favorece o uso do WS-AT.
A tabela a seguir mostra os diferentes tipos de fluxos de transação que podem ser gerados usando essas várias combinações.
| TransactionFlow encadernação |
Propriedade de associação TransactionFlow | Protocolo de associação TransactionFlowProtocol | Tipo de fluxo de transação |
|---|---|---|---|
| Obrigatório | verdadeiro | WS-AT | A transação deve ser conduzida no formato WS-AT interoperável. |
| Obrigatório | verdadeiro | OleTransactions | A transação deve ser processada no formato WCF OleTransactions. |
| Obrigatório | falso | Não aplicável | Não aplicável porque essa é uma configuração inválida. |
| Permitido | verdadeiro | WS-AT | A transação pode ser processada no formato interoperável WS-AT. |
| Permitido | verdadeiro | OleTransactions | A transação pode ser processada no formato WCF OleTransactions. |
| Permitido | falso | Qualquer valor | Uma transação não flui. |
| Não permitido | Qualquer valor | Qualquer valor | Uma transação não flui. |
A tabela a seguir resume o resultado do processamento de mensagens.
| Mensagem de entrada | Configuração do TransactionFlow | Cabeçalho da transação | Resultado do processamento de mensagens |
|---|---|---|---|
| A transação corresponde ao formato de protocolo esperado | Permitido ou obrigatório |
MustUnderstand igual a true. |
Processo |
| A transação não corresponde ao formato de protocolo esperado | Obrigatório |
MustUnderstand igual a false. |
Rejeitado porque uma transação é necessária |
| A transação não corresponde ao formato de protocolo esperado | Permitido |
MustUnderstand igual a false. |
Rejeitado porque o cabeçalho não é compreendido |
| Transação usando qualquer formato de protocolo | Não permitido |
MustUnderstand igual a false. |
Rejeitado porque o cabeçalho não é compreendido |
| Nenhuma transação | Obrigatório | Não aplicável | Rejeitado porque uma transação é necessária |
| Nenhuma transação | Permitido | Não aplicável | Processo |
| Nenhuma transação | Não permitido | Não aplicável | Processo |
Embora cada método em um contrato possa ter diferentes requisitos de fluxo de transação, a configuração do protocolo de fluxo de transação é definida no nível da vinculação. Isso significa que todos os métodos que compartilham o mesmo ponto de extremidade (e, portanto, a mesma associação) também compartilham a mesma política permitindo ou exigindo fluxo de transação, bem como o mesmo protocolo de transação, se aplicável.
Habilitando o fluxo de transação no nível do método
Os requisitos de fluxo de transação nem sempre são os mesmos para todos os métodos em um contrato de serviço. Portanto, o WCF também fornece um mecanismo baseado em atributo para permitir que as preferências de fluxo de transação de cada método sejam expressas. Isso é obtido pelo TransactionFlowAttribute que especifica o nível no qual uma operação de serviço aceita um cabeçalho de transação. Você deve marcar seus métodos de contrato de serviço com esse atributo se quiser habilitar o fluxo de transação. Esse atributo usa um dos valores da TransactionFlowOption enumeração, no qual o valor padrão é NotAllowed. Se qualquer valor, exceto NotAllowed for especificado, o método será necessário para não ser unidirecional. Um desenvolvedor pode usar esse atributo para especificar requisitos ou restrições de fluxo de transação no nível do método em tempo de design.
Habilitando o fluxo de transação no nível do endpoint
Além da configuração de fluxo de transação proporcionada pelo atributo no nível de método, o WCF oferece uma configuração em nível de endpoint para o fluxo de transações, permitindo que os administradores controlem o fluxo de transações em um nível mais alto.
Isso é obtido pelo TransactionFlowBindingElement, que permite habilitar ou desabilitar o fluxo de transação de entrada nas configurações de associação de um ponto de extremidade, bem como especificar o formato de protocolo de transação desejado para transações de entrada.
Se a associação tiver desabilitado o fluxo de transação, mas uma das operações em um contrato de serviço exigir uma transação de entrada, uma exceção de validação será gerada na inicialização do serviço.
A maioria das associações permanentes que o WCF fornece contêm os transactionFlow atributos e transactionProtocol para permitir que você configure a associação específica para aceitar transações de entrada. Para obter mais informações sobre como definir os elementos de configuração, consulte <binding>.
Um administrador ou implantador pode usar o fluxo de transação no nível do ponto de extremidade para configurar requisitos ou restrições de fluxo de transação no momento da implantação usando o arquivo de configuração.
Segurança
Para garantir a segurança e a integridade do sistema, você deve proteger as trocas de mensagens ao fluir transações entre aplicativos. Você não deve compartilhar ou divulgar detalhes da transação para qualquer aplicativo que não tenha autorização para participar da mesma transação.
Ao gerar clientes WCF para serviços Web desconhecidos ou não confiáveis por meio do uso da troca de metadados, as chamadas para operações nesses serviços Web devem suprimir a transação atual, se possível. O exemplo a seguir demonstra como fazer isso.
//client code which has an ambient transaction
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))
{
// No transaction will flow to this operation
untrustedProxy.Operation1(...);
scope.Complete();
}
//remainder of client code
Além disso, os serviços devem ser configurados para aceitar transações de entrada somente de clientes que eles autenticaram e autorizaram. As transações de entrada só devem ser aceitas se forem provenientes de clientes altamente confiáveis.
Declarações de política
O WCF usa declarações de política para controlar o fluxo de transações. As declarações de política podem ser encontradas no documento de política de um serviço, que é gerado pela agregação de contratos, configuração e atributos. O cliente pode obter o documento de política do serviço usando um HTTP GET ou um WS-MetadataExchange solicitação-resposta. Os clientes podem processar o documento de política para determinar quais operações em um contrato de serviço podem dar suporte ou exigir fluxo de transação.
As declarações de política de fluxo de transação afetam o fluxo de transações especificando os cabeçalhos SOAP que um cliente deve enviar para um serviço para representar uma transação. Todos os cabeçalhos de transação devem ser marcados com MustUnderstand igual a true. Qualquer mensagem com um cabeçalho marcado de outra forma é rejeitada com uma falha SOAP.
Somente uma declaração de política relacionada à transação pode estar presente em uma única operação. Documentos de política com mais de uma asserção de transação em uma operação são considerados inválidos e rejeitados pelo WCF. Além disso, apenas um único protocolo de transação pode estar presente dentro de cada tipo de porta. Documentos de política com operações que fazem referência a mais de um protocolo de transação dentro de um único tipo de porta são considerados inválidos e rejeitados pela Ferramenta de Utilitário de Metadados do ServiceModel (Svcutil.exe). Documentos de política com declarações de transação presentes em mensagens de saída ou mensagens de entrada unidirecionais também são considerados inválidos.