Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les applications Windows Communication Foundation (WCF) peuvent lancer une transaction à partir d’un client et coordonner la transaction au sein de l’opération de service. Les clients peuvent lancer une transaction et appeler plusieurs opérations de service, s’assurant que ces opérations sont validées ou annulées comme une seule unité.
Vous pouvez activer le comportement des transactions dans le contrat de service en spécifiant un ServiceBehaviorAttribute et en définissant ses propriétés TransactionIsolationLevel et TransactionScopeRequired pour les opérations de service qui nécessitent des transactions clients. Le TransactionAutoComplete paramètre spécifie si la transaction dans laquelle la méthode s’exécute est automatiquement terminée si aucune exception non gérée n’est levée. Pour plus d’informations sur ces attributs, consultez Attributs de transaction ServiceModel.
Le travail effectué dans les opérations de service et géré par un gestionnaire de ressources, tel que la journalisation des mises à jour de base de données, fait partie de la transaction du client.
L’exemple suivant illustre l’utilisation des attributs ServiceBehaviorAttribute et OperationBehaviorAttribute pour contrôler le comportement des transactions côté service.
[ServiceBehavior(TransactionIsolationLevel = System.Transactions.IsolationLevel.Serializable)]
public class CalculatorService: ICalculatorLog
{
[OperationBehavior(TransactionScopeRequired = true,
TransactionAutoComplete = true)]
public double Add(double n1, double n2)
{
recordToLog($"Added {n1} to {n2}");
return n1 + n2;
}
[OperationBehavior(TransactionScopeRequired = true,
TransactionAutoComplete = true)]
public double Subtract(double n1, double n2)
{
recordToLog($"Subtracted {n1} from {n2}");
return n1 - n2;
}
[OperationBehavior(TransactionScopeRequired = true,
TransactionAutoComplete = true)]
public double Multiply(double n1, double n2)
{
recordToLog($"Multiplied {n1} by {n2}");
return n1 * n2;
}
[OperationBehavior(TransactionScopeRequired = true,
TransactionAutoComplete = true)]
public double Divide(double n1, double n2)
{
recordToLog($"Divided {n1} by {n2}", n1, n2);
return n1 / n2;
}
}
Vous pouvez activer les transactions et le flux de transactions en configurant les liaisons client et de service pour utiliser le protocole WS-AtomicTransaction et en définissant l’élément <> sur , comme indiqué dans l’exemple de configuration suivant.
<client>
<endpoint address="net.tcp://localhost/ServiceModelSamples/service"
binding="netTcpBinding"
bindingConfiguration="netTcpBindingWSAT"
contract="Microsoft.ServiceModel.Samples.ICalculatorLog" />
</client>
<bindings>
<netTcpBinding>
<binding name="netTcpBindingWSAT"
transactionFlow="true"
transactionProtocol="WSAtomicTransactionOctober2004" />
</netTcpBinding>
</bindings>
Les clients peuvent commencer une transaction en créant un TransactionScope et en invoquant des opérations de service dans le cadre de la transaction.
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
//Do work here
ts.Complete();
}