Procédure d'utilisation de la fonctionnalité BYOT (Bring Your Own Transaction) de COM+
Exemple de code
La procédure et l'exemple suivants montrent comment une classe dérivée de la classe ServicedComponent peut utiliser la fonctionnalité BYOT de COM+ pour accéder à un Coordinateur de transactions distribuées (DTC, Distributed Transaction Coordinator). Pour plus d'informations sur l'utilisation de la fonctionnalité BYOT dans l'espace de noms System.EnterpriseServices, voir le rubrique sur BYOT (Bring Your Own Transaction).
Pour créer un objet qui utilise la transaction d'un autre objet.
Définissez une classe dérivée de la classe ServicedComponent et qui expose une propriété publique qui renvoie l'objet actuel de transaction DTC COM+. Par exemple, dans le code suivant, la classe
Base
hérite de la classe ServicedComponent et a une propriété publique qui renvoie l'objet ContextUtil.Transaction pour la transaction DTC COM+ en cours dans laquelle l'objet est instancié.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; } } }
Créez deux classes qui dérivent de la classe définie à l'étape 1 et définissez l'attribut Transaction pour les deux classes. Par exemple, le code suivant permet de déclarer les deux classes
CTransaction1
etCTransaction2
qui dérivent de la classeBase
et pour lesquelles l'attribut Transaction est défini.<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. }
Créez une application cliente qui utilise les classes créées à l'étape 2 pour tester la fonctionnalité BYOT.
Créez une instance de l'une des classes définies à l'étape 2. Par exemple, le code suivant permet de créer une instance de la classe
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(); } }
Récupérez la transaction DTC COM+ en cours de l'objet créé à l'étape 3.a. Par exemple, le code suivant permet de récupérer l'objet Transaction de la propriété publique
Transaction
de la classeCTransaction1
.Dim tx as Object = tx1.Transaction
Object tx = tx1.Transaction;
Créez une instance de la deuxième classe définie à l'étape 2 en utilisant l'objet Transaction récupéré au cours de l'étape 3.b. Par exemple, le code suivant permet de créer une instance de la classe
CTransaction2
en utilisant la transaction récupérée à l'étape 3.b.Dim tx2 as CTransaction2 = ctype(BYOT.CreateWithTransaction(tx, _ gettype(CTransaction2)),CTransaction2)
CTransaction2 tx2 = (CTransaction2)BYOT.CreateWithTransaction(tx, typeof(CTransaction2));
Générez une clé forte et compilez l'exemple de code comme suit :
sn –k BYOTDemo.snk vbc /r:System.EnterpriseServices.dll BYOTDemo.vb
sn –k BYOTDemo.snk
Exemple
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.");
}
}
Voir aussi
Référence
System.EnterpriseServices Namespace
Concepts
BYOT (Bring Your Own Transaction)
Résumé des services COM+ disponibles
Copyright ©2007 par Microsoft Corporation. Tous droits réservés.