Partager via


Exemple de composant de service

L'exemple suivant illustre un composant de service constitué de deux parties, un client et un serveur. Dans cet exemple, la classe Account est dérivée de la classe ServicedComponent, qui garantit que les contextes des objets Account sont hébergés dans COM+. Les attributs suivants y sont appliqués :

  • TransactionAttribute   Est appliqué à la classe Account pour affecter à la transaction la valeur Required, qui revient à utiliser l'outil d'administration des services de composants COM+ (accessible à partir du Panneau de configuration Windows) pour définir la prise en charge des transactions pour un composant COM+.
  • AutoCompleteAttribute   Est appliqué à la méthode Post. Cet attribut commande au runtime d'appeler automatiquement la fonction SetAbort sur la transaction si une exception non gérée est générée durant l'exécution de la méthode ; sinon, le runtime appelle la fonction SetComplete.

En plus des attributs employés dans cet exemple, divers attributs au niveau de l'assembly sont également utilisés pour fournir des informations d'inscription COM+. L'inscription manuelle exige que le composant de service ait un nom fort et soit placé dans le cache de l'assembly global (GAC, Global Assembly Cache). Pour plus d'informations sur les assemblys, consultez Assemblys avec nom fort.

Remarque   Les assemblys qui sont placés dans le GAC ne peuvent pas utiliser l'inscription dynamique. Si vous créez une application serveur, l'assembly et tous les assemblys dont il dépend doivent être ajoutés au cache de l'assembly global (GAC, Global Assembly Cache) en utilisant Windows Installer avant que l'application serveur puisse être utilisée ; sinon, l'application génère une exception.

Serveur BankComponent

Imports System.EnterpriseServices
Imports System.Runtime.CompilerServices
Imports System.Reflection

' Supply the COM+ application name. 
<assembly: ApplicationName("BankComponent")>
' Supply a strong-named assembly.
<assembly: AssemblyKeyFileAttribute("BankComponent.snk")>

Namespace BankComponent
      <Transaction(TransactionOption.Required)> _
      Public Class Account 
Inherits ServicedComponent
            <AutoComplete()> _
            Public Sub  Post(accountNum As Integer, amount As Double)
                  ' Updates the database; no need to call SetComplete.
                  ' Calls SetComplete automatically if no exception is generated.
            End Sub 
      End Class 
End Namespace 
[C#]
using System.EnterpriseServices;
using System.Runtime.CompilerServices;
using System.Reflection;

// Supply the COM+ application name.
[assembly: ApplicationName("BankComponent")]
// Supply a strong-named assembly.
[assembly: AssemblyKeyFileAttribute("BankComponent.snk")]

namespace BankComponent
{
      [Transaction(TransactionOption.Required)]
      public class Account : ServicedComponent
      {
            [AutoComplete] 
            public bool Post(int accountNum, double amount)
            {
                /* Updates the database; no need to call SetComplete.
                   Calls SetComplete automatically if no exception is
                   generated. */
            return false;     
            } 
      }
}

Client BankComponent

Imports BankComponent
Public Class Client 
   Shared Sub Main()
      Dim Account As New Account()
      ' Post money into the account. 
      Account.Post(5, 100)
   End Sub
End Class
[C#]
using BankComponent;
namespace BankComponentConsoleClient
{
      class Client
      {
            public static int Main() 
            {
                  try
                  {
                        Account act = new Account();
                        // Post money into the account.
                        act.Post(5, 100);
                        return(0);
                  }
                  catch
                  {
                        return(1);
                  }
            }
      }
}

Makefile.bat

Vous pouvez compiler le serveur et le client comme suit :

sn –k BankComponent.snk
vbc /t:library /r:System.EnterpriseServices.dll Bank.vb
vbc /r:Bank.dll /r:System.EnterpriseServices.dll BankClient.vb
[C#]
sn –k BankComponent.snk
csc /t:library /r:System.EnterpriseServices.dll Bank.cs
csc /r:Bank.dll BankClient.cs

Voir aussi

Écriture de composants de service | Vue d'ensemble des composants de service | Application des attributs pour configurer des services | Inscription de composants de service | Résumé des services COM+ disponibles | ServicedComponent | System.EnterpriseServices, espace de noms