Procédure d'utilisation des transactions automatiques dans une classe .NET Framework

La procédure ci-après décrit comment préparer une classe en vue de sa participation à une transaction automatique.

Pour préparer une classe en vue de sa participation à une transaction automatique

  1. Dérivez votre classe de la classe ServicedComponent, puis appliquez TransactionAttribute à votre classe. L'exemple suivant montre comment appliquer l'attribut TransactionAttribute à une classe dérivée de la classe ServicedComponent.

    <Transaction(TransactionOption.Required)> Public Class Account
       Inherits ServicedComponent
       '. . .
    End Class
    
    [Transaction(TransactionOption.Required)]
    public class Account : ServicedComponent
    {
      //. . .
    }
    
  2. Appliquez l'attribut AutoComplete à chaque méthode pour laquelle la méthode ContextUtil.SetComplete doit être appelée automatiquement en l'absence d'exceptions. L'exemple suivant montre comment appliquer l'attribut AutoComplete.

    <AutoComplete()> Public Sub Debit(amount As Integer)
          ' Do some database work. Any exception thrown here aborts the 
          ' transaction; otherwise, transaction commits.
    End Sub
    
    [AutoComplete]
    public void Debit(int amount)
    {
        // Do some database work. Any exception thrown here aborts the 
        // transaction; otherwise, transaction commits.
    }
    
  3. Signez l'assembly avec un nom fort. Pour signer l'assembly à l'aide d'attributs, créez une paire de clés à l'aide de Sn.exe, puis ajoutez l'attribut d'assembly AssemblyKeyFileAttribute ou AssemblyKeyNameAttribute et spécifiez le nom du fichier qui contient la paire de clés permettant de signer l'assembly avec un nom fort.

    <assembly: AssemblyKeyFileAttribute("TestApp.snk")>
    
    [assembly: AssemblyKeyFileAttribute("TestApp.snk")]
    
  4. Inscrivez l'assembly qui contient votre classe dans le catalogue COM+.

  5. Si le client qui appelle des instances de votre classe est managé par le Common Language Runtime, l'inscription est automatique. Toutefois, si vous estimez qu'un appelant non managé peut créer et appeler des instances de votre classe, utilisez l'outil .NET Services Installation Tool (Regsvcs.exe) pour effectuer l'inscription manuellement.

Exemple

' -----------------------------------------------------------------
' TestApp.vb
' Generate a Strong name: 
'    sn -k TestApp.snk
' Compile the code:
'    vbc /target:exe /r:System.EnterpriseServices.dll TestApp.vb
' Run TestApp:
'    start TestApp.exe
' -----------------------------------------------------------------
Option Explicit
Option Strict

Imports System
Imports System.Runtime.CompilerServices
Imports System.EnterpriseServices
Imports System.Reflection

'Registration details.
'COM+ application name as it appears in the COM+ catalog.
<assembly: ApplicationName("TestApp")>
'Strong name for assembly.
<assembly: AssemblyKeyFileAttribute("TestApp.snk")>

<Transaction(TransactionOption.Required)> Public Class Account
   Inherits ServicedComponent
   
   'Provides SetComplete behavior in the absence of exceptions.
   <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

Public Class client
   Public Shared Sub Main()
      Dim accountX As New Account()
      accountX.Debit(100)
      Environment.Exit(0)
   End Sub
End Class
// -----------------------------------------------------------------
// TestApp.cs
// Generate a Strong name: 
//    sn -k TestApp.snk
// Compile the code:
//    csc /target:exe /r:System.EnterpriseServices.dll TestApp.cs
// Run TestApp:
//    start TestApp.exe
// -----------------------------------------------------------------
using System;
using System.Runtime.CompilerServices;
using System.EnterpriseServices;
using System.Reflection;

//Registration details.
//COM+ application name as it appears in the COM+ catalog.
[assembly: ApplicationName("TestApp")]
//Strong name for assembly.
[assembly: AssemblyKeyFileAttribute("TestApp.snk")]

[Transaction(TransactionOption.Required)]
public class Account : ServicedComponent
{
  //Provides SetComplete behavior in the absence of exceptions.
  [AutoComplete]
  public void Debit(int amount)
  {
     // Do some database work. Any exception thrown here aborts the 
     // transaction; otherwise, transaction commits.
  }
}

public class client
{
  public static int Main() 
  {
    Account accountX = new Account();
    accountX.Debit(100);
    return 0;
  }
}

Voir aussi

Concepts

Vote dans une transaction automatique

Autres ressources

Écriture de composants de service

Footer image

Copyright ©2007 par Microsoft Corporation. Tous droits réservés.