Cómo usar la característica Transacciones manuales de COM+
Ejemplo de código
El procedimiento del siguiente ejemplo muestra cómo una clase derivada de la clase ServicedComponent puede utilizar la característica Transacciones manuales de COM+ para tener acceso al Coordinador de transacciones distribuidas (DTC). Para obtener más información acerca de cómo usar la característica Transacciones manuales en el espacio de nombres System.EnterpriseServices, vea Transacciones manuales.
Para crear un objeto que utilice la transacción de otro objeto.
Defina una clase que se derive de la clase ServicedComponent y exponga una propiedad pública que devuelva el objeto de la transacción actual del DTC de COM+. Por ejemplo, en el siguiente código, la clase
Base
hereda la clase ServicedComponent y tiene una propiedad pública que devuelve el objeto ContextUtil.Transaction para la transacción DTC de COM+ en la que se crea la instancia del objeto.Imports System.EnterpriseServices Public Class Base Inherits ServicedComponent Public Readonly Property Transaction() as Object Get Return ContextUtil.Transaction End Get End Property End Class
using System.EnterpriseServices; public class Base : ServicedComponent { public Object Transaction { get { return ContextUtil.Transaction; } } }
Cree dos clases que se deriven de la clase definida en el paso 1 y establezca el atributo Transaction para ambas clases. Por ejemplo, en el siguiente código se declaran dos clases
CTransaction1
yCTransaction2
que se derivan de la claseBase
y tienen el atributo Transaction establecido.<Transaction()> Public Class CTransaction1 Inherits Base ' Insert your transaction logic here. End Class <Transaction()> Public Class CTransaction2 Inherits Base ' Insert your transaction logic here. End Class
[Transaction] public class CTransaction1 : Base { // Insert your transaction logic here. } [Transaction] public class CTransaction2 : Base { // Insert your transaction logic here. }
Cree una aplicación cliente que utilice las clases creadas en el paso 2 para probar la característica Transacciones manuales.
Cree una instancia de una de las clases definidas en el paso 2. Por ejemplo, el código siguiente crea una instancia de la clase
CTransaction1
.Class BYOTDemonstration Public Shared Sub Main() Dim tx1 as New CTransaction1 End Sub End Class
class BYOTDemonstration { static void Main() { CTransaction1 tx1 = new CTransaction1(); } }
Recupere la transacción DTC de COM+ actual del objeto creado en el paso 3.a. Por ejemplo, en el siguiente código se recupera el objeto Transaction de la propiedad pública
Transaction
de la claseCTransaction1
.Dim tx as Object = tx1.Transaction
Object tx = tx1.Transaction;
Cree una instancia de la segunda clase definida en el paso 2 mediante el uso del objeto Transaction recuperado en el paso 3.b. Por ejemplo, en el siguiente código se crea una instancia de la clase
CTransaction2
mediante el uso del objeto Transaction recuperado en el paso 3.b.Dim tx2 as CTransaction2 = ctype(BYOT.CreateWithTransaction(tx, _ gettype(CTransaction2)),CTransaction2)
CTransaction2 tx2 = (CTransaction2)BYOT.CreateWithTransaction(tx, typeof(CTransaction2));
Genere una clave segura y compile el ejemplo de la manera siguiente:
sn –k BYOTDemo.snk vbc /r:System.EnterpriseServices.dll BYOTDemo.vb
sn –k BYOTDemo.snk
Ejemplo
Imports System
Imports System.Reflection
Imports System.EnterpriseServices
<assembly: AssemblyKeyFile("BYOTDemo.snk")>
Public Class Base
Inherits ServicedComponent
Public Readonly Property Transaction() as Object
Get
Return ContextUtil.Transaction
End Get
End Property
End Class
<Transaction()> Public Class CTransaction1
Inherits Base
' Insert your transaction logic here.
End Class
<Transaction()> Public Class CTransaction2
Inherits Base
' Insert your transaction logic here.
End Class
Class BYOTDemonstration
Public Shared Sub Main()
' Create a transactional object, and then get its
' transaction.
Dim tx1 as New CTransaction1
Console.WriteLine("Created transaction1.")
Dim tx as Object = tx1.Transaction
Console.WriteLine("Got the transaction of transaction1.")
Dim tx2 as CTransaction2 = ctype(BYOT.CreateWithTransaction(tx, _ gettype(CTransaction2)),CTransaction2)
Console.WriteLine("Created transaction2 with the _
transaction of transaction1.")
End Sub
End Class
using System;
using System.Reflection;
using System.EnterpriseServices;
[assembly: AssemblyKeyFileAttribute("byotdemo.snk")]
public class Base : ServicedComponent
{
public Object Transaction
{
get { return ContextUtil.Transaction; }
}
}
[Transaction]
public class CTransaction1 : Base
{
// Insert your transaction logic here.
}
[Transaction]
public class CTransaction2 : Base
{
// Insert your transaction logic here.
}
class BYOTDemonstration
{
static void Main()
{
/* Create a transactional object, and then get its
transaction. */
CTransaction1 tx1 = new CTransaction1();
Console.WriteLine("Created transaction1.");
Object tx = tx1.Transaction;
Console.WriteLine("Got the transaction of transaction1.");
CTransaction2 tx2 = (CTransaction2)BYOT.CreateWithTransaction(tx, typeof(CTransaction2));
Console.WriteLine("Created transaction2 using the transaction of transaction1.");
}
}
Consulte también
Referencia
System.EnterpriseServices Namespace
Conceptos
Transacciones manuales
Resumen de los servicios COM+ disponibles
Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.