Verfahrensweise: Verwenden von automatischen Transaktionen in einer .NET Framework-Klasse

Das folgende Verfahren beschreibt, wie eine Klasse für die Teilnahme an einer automatischen Transaktion vorbereitet wird.

So bereiten Sie eine Klasse für die Teilnahme an einer automatischen Transaktion vor

  1. Leiten Sie Ihre Klasse von der ServicedComponent-Klasse ab, und wenden Sie TransactionAttribute auf Ihre Klasse an. Das folgende Beispiel zeigt, wie das TransactionAttribute-Attribut auf eine von der ServicedComponent-Klasse abgeleitete Klasse angewendet wird.

    <Transaction(TransactionOption.Required)> Public Class Account
       Inherits ServicedComponent
       '. . .
    End Class
    
    [Transaction(TransactionOption.Required)]
    public class Account : ServicedComponent
    {
      //. . .
    }
    
  2. Wenden Sie das AutoComplete-Attribut auf alle Methoden an, für die die ContextUtil.SetComplete-Methode bei Abwesenheit von Ausnahmen automatisch aufgerufen werden muss. Das folgende Beispiel veranschaulicht, wie das AutoComplete-Attribut angewendet wird.

    <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. Signieren Sie die Assembly mit einem starkem Namen. Erstellen Sie zum Signieren der Assembly mithilfe von Attributen unter Verwendung von Sn.exe ein Schlüsselpaar, fügen Sie das Assemblyattribut AssemblyKeyFileAttribute oder AssemblyKeyNameAttribute hinzu, und geben Sie den Namen der Datei mit dem Schlüsselpaar an, um die Assembly mit einem starken Namen zu signieren.

    <assembly: AssemblyKeyFileAttribute("TestApp.snk")>
    
    [assembly: AssemblyKeyFileAttribute("TestApp.snk")]
    
  4. Registrieren Sie die Assembly, die Ihre Klasse enthält, im COM+-Katalog.

  5. Wenn der Client, der Instanzen Ihrer Klasse aufruft, von der Common Language Runtime verwaltet wird, wird die Registrierung für Sie durchgeführt. Wenn Sie aber erwarten, dass ein nicht verwalteter Aufrufer möglicherweise Instanzen Ihrer Klasse erstellt und aufruft, führen Sie die Registrierung mithilfe des .NET Services Installation-Tools (Regsvcs.exe) manuell durch.

Beispiel

' -----------------------------------------------------------------
' 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;
  }
}

Siehe auch

Konzepte

Abstimmen in einer automatischen Transaktion

Weitere Ressourcen

Schreiben von Serviced Components

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.