Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En el procedimiento siguiente se describe cómo preparar una clase para que participe en una transacción automática.
Para preparar una clase para que participe en una transacción automática
Derive su clase de la clase ServicedComponent y aplique el atributo TransactionAttribute a su clase. En el ejemplo siguiente se muestra cómo aplicar el atributo TransactionAttribute a una clase derivada de la clase ServicedComponent.
<Transaction(TransactionOption.Required)> Public Class Account Inherits ServicedComponent '. . . End Class[Transaction(TransactionOption.Required)] public class Account : ServicedComponent { //. . . }Aplique el atributo AutoComplete a cada método para el que se deba llamar automáticamente al método ContextUtil.SetComplete en ausencia de excepciones. En el siguiente ejemplo se muestra cómo se aplica el atributo 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. }Firmar un ensamblado con un nombre seguro. Para firmar el ensamblado con atributos, cree un par de claves mediante Sn.exe, agregue el atributo de ensamblado AssemblyKeyFileAttribute o AssemblyKeyNameAttribute y especifique el nombre del archivo que contiene el par de claves para firmar el ensamblado con un nombre seguro.
<assembly: AssemblyKeyFileAttribute("TestApp.snk")>[assembly: AssemblyKeyFileAttribute("TestApp.snk")]Registre el ensamblado que contiene la clase con el catálogo de COM+.
Si Common Language Runtime administra el cliente que llama a instancias de la clase, el registro se realiza automáticamente. Sin embargo, si se prevé que un llamador no administrado pueda crear y llamar a instancias de la clase, se debe utilizar la herramienta Instalación de servicios de .NET (Regsvcs.exe) para realizar el registro manualmente.
Ejemplo
' -----------------------------------------------------------------
' 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;
}
}
Consulte también
Conceptos
Votación en una transacción automática
Otros recursos
Escribir componentes con servicio
.gif)
Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.