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.