Condividi tramite


Esempio di componente servito

Nell'esempio seguente viene illustrato un componente servito composto da due parti, un client e un server. Nell'esempio, la classe Account deriva dalla classe ServicedComponent, in modo da garantire che i contesti degli oggetti Account siano ospitati in COM+. In questo esempio vengono applicati gli attributi seguenti:

  • TransactionAttribute   Viene applicato alla classe Account per impostare la transazione su Required, che equivale a impostare il supporto delle transazioni su un componente COM+ mediante lo strumento di amministrazione Servizi componenti (disponibile nel Pannello di controllo di Windows).

  • AutoCompleteAttribute   Viene applicato al metodo Post. Questo attributo indica al runtime di chiamare automaticamente la funzione SetAbort sulla transazione se durante l'esecuzione del metodo viene generata un'eccezione non gestita; in caso contrario viene chiamata la funzione SetComplete.

Oltre agli attributi utilizzati in questo esempio, vengono utilizzati diversi attributi a livello di assembly per fornire informazioni sulla registrazione COM+. È necessario assegnare al componente servito un nome sicuro e collocarlo nella cache di assembly globale (Global Assembly Cache) per la registrazione manuale. Per ulteriori informazioni sugli assembly, vedere Assembly con nome sicuro.

NoteNota:

Non è possibile utilizzare la registrazione dinamica per gli assembly collocati nella GAC. Se si crea un'applicazione server, sarà necessario aggiungere l'assembly e tutti gli assembly da cui dipende alla cache di assembly globale (GAC) mediante Windows Installer prima che sia possibile utilizzare l'applicazione server. In caso contrario, verrà generata un'eccezione.

Server 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

È possibile compilare il server e il client nel modo illustrato di seguito:

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

Vedere anche

Attività

Procedura: creare un componente servito

Riferimenti

ServicedComponent
System.EnterpriseServices Namespace

Concetti

Cenni preliminari sui componenti serviti
Applicazione di attributi per la configurazione dei servizi COM+
Registrazione dei componenti serviti
Riepilogo dei servizi COM+ disponibili

Altre risorse

Scrittura dei componenti serviti

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.