Ejemplo de componente con servicio

El ejemplo siguiente es el de un componente con servicio que tiene dos partes, un cliente y un servidor. En el ejemplo, la clase Account se deriva de la clase ServicedComponent, lo que garantiza que los contextos de los objetos Account se alojen en COM+. En este ejemplo se aplican los siguientes atributos:

  • TransactionAttribute   Se aplica a la clase Account para establecer la transacción en Required, lo que equivale a usar la herramienta administrativa Servicios de componentes (disponible en el Panel de control de Windows) para establecer la compatibilidad de transacciones en un componente COM+.

  • AutoCompleteAttribute   Se aplica al método Post. Este atributo indica al motor de tiempo de ejecución que llame automáticamente a la función SetAbort en la transacción si se genera una excepción no controlada durante la ejecución del método; en caso contrario, el motor de tiempo de ejecución llama a la función SetComplete.

Además de los atributos usados en este ejemplo, se usan también diversos atributos del nivel del ensamblado para proporcionar información de registro de COM+. Un componente con servicio debe tener un nombre seguro y se debe ubicar en la caché de ensamblados global para su registro manual. Para obtener más información sobre los ensamblados, vea Ensamblados con nombre seguro.

Nota:

Los ensamblados que se ubican en la caché de ensamblados global (GAC) no pueden usar el registro dinámico. Si se crea una aplicación de servidor, se ha de agregar el ensamblado y todos los ensamblados de los que dependa a la caché de ensamblados global (GAC) mediante Windows Installer para poder utilizar la aplicación de servidor; en caso contrario, la aplicación generará una excepción.

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

Cliente 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

El servidor y el cliente se pueden compilar de la forma siguiente:

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

Consulte también

Tareas

Cómo crear un componente con servicio

Referencia

ServicedComponent
System.EnterpriseServices Namespace

Conceptos

Información general sobre componentes con servicio
Aplicar atributos para configurar servicios COM+
Registrar componentes con servicio
Resumen de los servicios COM+ disponibles

Otros recursos

Escribir componentes con servicio

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.