Compartilhar via


Configuração de transação de ServiceModel

O WCF (Windows Communication Foundation) fornece três atributos para configurar transações para um serviço: transactionFlow, transactionProtocol e transactionTimeout.

Configurando o transactionFlow

A maioria das associações predefinidas que o WCF fornece contém os atributos transactionFlow e transactionProtocol, para que você possa configurar a associação para aceitar transações de entrada para um ponto de extremidade específico usando um protocolo de fluxo de transação específico. Além disso, você pode usar o elemento transactionFlow e seu atributo transactionProtocol para criar sua própria associação personalizada. Para obter mais informações sobre como definir os elementos de configuração, consulte <Associação> e Esquema de configuração do WCF.

O atributo transactionFlow especifica se o fluxo de transação está habilitado para pontos de extremidade de serviço que usam a associação.

Configurando transactionProtocol

O atributo transactionProtocol especifica o protocolo de transação a ser usado com pontos de extremidade de serviço que usam a associação.

Veja a seguir um exemplo de uma seção de configuração que configura a associação especificada para dar suporte ao fluxo de transação, bem como usar o protocolo WS-AtomicTransaction.

<netNamedPipeBinding>  
   <binding name="test"  
      closeTimeout="00:00:10"  
      openTimeout="00:00:20"
      receiveTimeout="00:00:30"  
      sendTimeout="00:00:40"  
      transactionFlow="true"  
      transactionProtocol="WSAtomicTransactionOctober2004"  
      hostNameComparisonMode="WeakWildcard"  
      maxBufferSize="1001"  
      maxConnections="123"
      maxReceivedMessageSize="1000">  
   </binding>  
</netNamedPipeBinding>  

Configurando transactionTimeout

Você pode configurar o atributo transactionTimeout para o serviço WCF no elemento behavior do arquivo de configuração. O código a seguir demonstra como fazer isso.

<configuration>  
   <system.serviceModel>  
      <behaviors>  
         <behavior name="NewBehavior" transactionTimeout="00:01:00" /> <!-- 1 minute timeout -->  
      </behaviors>  
   </system.serviceModel>  
</configuration>  

O atributo transactionTimeout especifica o período de tempo no qual uma nova transação criada no serviço deve ser concluída. Ele é usado como o tempo limite TransactionScope para qualquer operação que estabeleça uma nova transação e, se OperationBehaviorAttribute for aplicado, a propriedade TransactionScopeRequired será definida como true.

O tempo limite a duração da criação da transação até a conclusão da fase 1 no protocolo de confirmação em duas fases.

Se esse atributo estiver definido em uma seção de configuração service, você deverá aplicar pelo menos um método do serviço correspondente com OperationBehaviorAttribute, no qual a propriedade TransactionScopeRequired é definida como true.

Observe que o valor de tempo limite usado é o valor menor entre essa configuração transactionTimeout e qualquer propriedade TransactionTimeout.

Confira também