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.

NoteNota:

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

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

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

Consulte también

Footer image



Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.

Adiciones de comunidad

Mostrar: