下面的过程描述如何准备类以参与自动事务。
准备类以参与自动事务
- 从 ServicedComponent 类派生您的类,并将 TransactionAttribute 应用于该类。以下示例说明了如何将 TransactionAttribute 属性应用于从 ServicedComponent 类派生的类。 - <Transaction(TransactionOption.Required)> Public Class Account Inherits ServicedComponent '. . . End Class- [Transaction(TransactionOption.Required)] public class Account : ServicedComponent { //. . . }
- 对于不存在异常时必须为其自动调用 ContextUtil.SetComplete 方法的每个方法,应用 AutoComplete 属性。以下示例说明了如何应用 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. }
- 用强名称为程序集签名。若要使用属性为程序集签名,请使用 Sn.exe 创建一个密钥对,然后添加 AssemblyKeyFileAttribute 或 AssemblyKeyNameAttribute 程序集属性,并指定包含该密钥对的文件的名称,以使用强名称为该程序集签名。 - <assembly: AssemblyKeyFileAttribute("TestApp.snk")>- [assembly: AssemblyKeyFileAttribute("TestApp.snk")]
- 向 COM+ 目录注册包含此类的程序集。 
- 如果调用类的实例的客户端是由公共语言运行库管理的,则注册将自动执行。但是,如果预期非托管调用方可能创建和调用此类的实例,请使用 .NET 服务安装工具 (Regsvcs.exe) 手动执行注册。 
示例
' -----------------------------------------------------------------
' 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;
  }
}
请参见
概念
其他资源
.gif)
版权所有 (C) 2007 Microsoft Corporation。保留所有权利。