Partager via


Vote dans une transaction automatique

Les classes .NET Framework et les pages ASP.NET peuvent voter pour valider ou abandonner leur transaction en cours. L'absence d'un vote explicite dans votre code effectue un cast sur un vote de validation par défaut. La validation par défaut peut toutefois diminuer les performances de votre application en allongeant le temps nécessaire à chaque transaction pour libérer des ressources coûteuses.

Un vote explicite permet également à votre classe ou à votre page d'abandonner une transaction si elle rencontre une erreur significative. Une fois de plus, vous pouvez améliorer les performances de votre application en interceptant une erreur irrécupérable au début de la transaction, en abandonnant la transaction puis en libérant les ressources.

Utilisation de AutoComplete

System.EnterpriseServices.AutoCompleteAttribute force un objet participant à une transaction à voter en faveur de l'exécution de cette transaction si la méthode retourne un résultat normal. Si l'appel de méthode lève une exception, la transaction est abandonnée. Vous ne pouvez appliquer cet attribut qu'à des classes dérivées de la classe ServicedComponent.

Pour utiliser cette fonctionnalité, insérez l'attribut avant la méthode de classe. Si vous ajoutez l'attribut à une méthode d'interface, le Common Language Runtime l'ignore. Le fragment de code suivant montre comment placer l'attribut dans une classe liée aux transactions.

<Transaction(TransactionOption.Supported)> Public Class Account
   Inherits ServicedComponent
   
   <AutoComplete()> Public Sub Debit(amount As Integer)
      ' Do some database work. Any exception thrown here aborts the 
      ' transaction; otherwise, transaction commits.
   End Sub
End Class
[C#]
[Transaction(TransactionOption.Supported)]
public class Account : ServicedComponent {
    [AutoComplete]
    public void Debit(int amount) {
        // Do some database work. Any exception thrown here aborts the transaction; 
        // otherwise, transaction commits.
    }
}

Utilisation de SetAbort et de SetComplete

Vous pouvez utiliser la classe System.EnterpriseServices.ContextUtil, qui expose les méthodes SetComplete ou SetAbort, pour valider ou abandonner de façon explicite une transaction. SetComplete indique que votre objet vote pour valider sa tâche ; SetAbort indique que votre objet a rencontré un problème et vote en faveur de l'abandon de la transaction en cours. Une transaction n'est ni validée ni abandonnée tant que l'objet racine de la transaction n'est pas désactivé. Par ailleurs, un seul vote d'abandon provenant de tout objet participant à la transaction provoque l'échec de l'ensemble de la transaction.

Le fragment de code suivant illustre l'utilisation des méthodes SetAbort et SetComplete.

'Try to do something crucial to the transaction in progress.
If Not DoSomeWork() Then
   'Something goes wrong.
   ContextUtil.SetAbort()
Else
   'All goes well.
   ContextUtil.SetComplete()
End If
[C#]
//Try to do something crucial to the transaction in progress.
if( !DoSomeWork() )
{
  //Something goes wrong.
  ContextUtil.SetAbort();
}
else
{
  //All goes well.
  ContextUtil.SetComplete();
}

Voir aussi

Transactions automatiques