Exemple de composant de service
L'exemple suivant présente un composant de service constitué de deux parties, un client et un serveur. Dans cet exemple, la classe Account
est dérivée de la classe ServicedComponent, qui garantit que les contextes des objets Account
sont hébergés dans COM+. Les attributs suivants sont appliqués dans cet exemple :
TransactionAttribute Est appliqué à la classe
Account
pour affecter à la transaction la valeur Required, qui revient à utiliser l'outil d'administration Services de composants COM+ (accessible à partir du Panneau de configuration Windows) pour définir la prise en charge des transactions pour un composant COM+.AutoCompleteAttribute Est appliqué à la méthode Post. Cet attribut commande au runtime d'appeler automatiquement la fonction SetAbort sur la transaction si une exception non gérée est générée durant l'exécution de la méthode ; sinon, le runtime appelle la fonction SetComplete.
En plus des attributs présentés dans cet exemple, divers attributs au niveau de l'assembly sont également utilisés pour fournir des informations d'inscription COM+. L'inscription manuelle exige que le composant de service ait un nom fort et qu'il soit placé dans le cache de l'assembly global (GAC, Global Assembly Cache). Pour plus d'informations sur les assemblys, voir la rubrique sur les assemblys avec nom fort.
Remarque : |
---|
Les assemblys qui sont placés dans le GAC ne peuvent pas utiliser l'inscription dynamique. Si vous créez une application serveur, l'assembly et tous les assemblys dont il dépend doivent être ajoutés au cache de l'assembly global (GAC, Global Assembly Cache) en utilisant Windows Installer avant que l'application serveur puisse être utilisée ; sinon, l'application génère une exception. |
Serveur 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
Vous pouvez compiler le serveur et le client comme suit :
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
Voir aussi
Tâches
Procédure de création d'un composant de service
Référence
ServicedComponent
System.EnterpriseServices Namespace
Concepts
Vue d'ensemble des composants de service
Application des attributs pour configurer les services COM+
Inscription de composants de service
Résumé des services COM+ disponibles
Autres ressources
Écriture de composants de service
Copyright ©2007 par Microsoft Corporation. Tous droits réservés.