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.