Configuração de transação ServiceModel
O Windows Communication Foundation (WCF) 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 fornecidas pelo WCF contém os transactionFlow
atributos 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 transactionFlow
elemento e seu transactionProtocol
atributo para criar sua própria associação personalizada. Para obter mais informações sobre como definir os elementos de configuração, consulte <Vinculação> e esquema de configuração do WCF.
O transactionFlow
atributo especifica se o fluxo de transações está habilitado para pontos de extremidade de serviço que usam a associação.
Configurando o transactionProtocol
O transactionProtocol
atributo especifica o protocolo de transação a ser usado com pontos de extremidade de serviço que usam a associação.
A seguir está um exemplo de uma seção de configuração que configura a associação especificada para dar suporte ao fluxo de transações, bem como um uso do 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 transactionTimeout
atributo para seu serviço WCF no behavior
elemento 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 transactionTimeout
atributo especifica o período de tempo dentro do qual uma nova transação criada no serviço deve ser concluída. Ele é usado como o TransactionScope tempo limite para qualquer operação que estabeleça uma nova transação e, se OperationBehaviorAttribute for aplicada, a TransactionScopeRequired propriedade será definida como true
.
O tempo limite especifica a duração do tempo desde a criação da transação até a conclusão da fase 1 no protocolo de confirmação de duas fases.
Se esse atributo for definido dentro de uma service
seção de configuração, você deverá aplicar pelo menos um método do serviço correspondente com OperationBehaviorAttribute, no qual a TransactionScopeRequired propriedade está definida como true
.
Observe que o valor de tempo limite usado é o menor valor entre essa transactionTimeout
configuração e qualquer TransactionTimeout propriedade.