Freigeben über


Beispiel für eine Serviced Component

Im folgenden Beispiel wird eine Serviced Component dargestellt, die aus zwei Teilen besteht: einem Client und einem Server. Dabei wird die Account-Klasse von der ServicedComponent-Klasse abgeleitet, um sicherzustellen, dass der Kontext der Account-Objekte durch COM+ bereitgestellt wird. Folgende Attribute werden in diesem Beispiel verwendet:

  • TransactionAttribute   Das Attribut wird auf die Account-Klasse angewendet, um die Transaktion auf Required festzulegen. Das entspricht der Verwendung des Verwaltungstools Komponentendienste (zugänglich über die Windows-Systemsteuerung) zur Aktivierung der Transaktionsunterstützung für eine COM+-Komponente.
  • AutoCompleteAttribute   Dieses Attribut wird durch die Post-Methode angewendet. Durch dieses Attribut wird die Common Language Runtime angewiesen, automatisch die SetAbort-Funktion für die Transaktion auszuführen, wenn während der Ausführung der Methode eine unbehandelte Ausnahme ausgelöst wird. Andernfalls wie die SetComplete-Funktion ausgeführt.

Neben den in diesem Beispiel verwendeten Attributen gibt es auf Assemblyebene noch viele weitere, mit denen die COM+-Registrierungsinformationen unterstützt werden. Eine Serviced Component muss einen starken Namen aufweisen und sollte bei manueller Registrierung im globalen Assemblycache (GAC) abgelegt werden. Weitere Informationen über Assemblies finden Sie unter Assemblies mit starkem Namen.

Hinweis   Für Assemblies, die im globalen Assemblycache abgelegt wurden, kann keine dynamische Registrierung durchgeführt werden. Wenn Sie eine Serveranwendung erstellen, müssen die Assembly und alle Assemblies, von denen sie abhängig ist, mit Windows Installer dem GAC hinzugefügt werden, bevor die Serveranwendung verwendet werden kann. Andernfalls wird durch die Anwendung eine Ausnahme ausgelöst.

BankComponent-Server

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;     
            } 
      }
}

BankComponent-Client

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

Server und Client können wie folgt kompiliert werden:

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

Siehe auch

Schreiben von Serviced Components | Übersicht über Serviced Components | Anwenden von Attributen zum Konfigurieren von Diensten | Registrieren von Serviced Components | Zusammenfassung verfügbarer COM+-Dienste | ServicedComponent | System.EnterpriseServices-Namespace