Partager via


Exemple de composant de service

L'exemple suivant présente 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 sont appliqués dans cet exemple :

  • TransactionAttribute   Est appliqué à la classe Account pour affecter à la transaction la valeur Required, qui revient à utiliser l'outil d'administration 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 présenté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 qu'il soit placé dans le cache de l'assembly global (GAC, Global Assembly Cache). Pour plus d'informations sur les assemblys, voir la rubrique sur les assemblys avec nom fort.

NoteRemarque :

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 
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
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
sn –k BankComponent.snk
csc /t:library /r:System.EnterpriseServices.dll Bank.cs
csc /r:Bank.dll BankClient.cs

Voir aussi

Tâches

Procédure de création d'un composant de service

Référence

ServicedComponent
System.EnterpriseServices Namespace

Concepts

Vue d'ensemble des composants de service
Application des attributs pour configurer les services COM+
Inscription de composants de service
Résumé des services COM+ disponibles

Autres ressources

Écriture de composants de service

Footer image

Copyright ©2007 par Microsoft Corporation. Tous droits réservés.