COM+ Integration: Web-Hosted
Cet exemple montre comment exposer une interface d'une application COM+ en tant que service Windows Communication Foundation (WCF) et comment l'appeler à partir d'un client WCF. Cet exemple se compose d'un programme de console client (.exe) et d'une application bibliothèque Enterprise Services (.dll) enregistrée dans COM+.
Remarque : |
---|
La procédure d'installation ainsi que les instructions de génération relatives à cet exemple figurent à la fin de cette rubrique. |
Remarque : |
---|
La version Visual Basic de cet exemple doit être configurée en tant qu'application serveur et être hébergée hors processus pour s'exécuter sur les éditions 64 bits du système d'exploitation Windows. Pour plus d'informations sur la configuration de l'exemple en tant qu'application serveur, consultez Configuration des applications COM+ (page pouvant être en anglais). |
L'application Enterprise Services contient un composant unique qui implémente une interface ICalculator
unique qui expose les méthodes mathématiques suivantes : addition, soustraction, multiplication et division.
// Define the component's interface.
public interface ICalculator
{
double Add(double n1, double n2);
double Subtract(double n1, double n2);
double Multiply(double n1, double n2);
double Divide(double n1, double n2);
}
Cette interface est exposée en tant que contrat de service qui définit un modèle de communication demande-réponse. Le client adresse des demandes synchrones à une opération mathématique, puis le service et le composant sous-jacent répondent à cette demande en transmettant le résultat. L'activité du client est visible dans la fenêtre de console.
Le service est hébergé dans un processus par les services IIS (Internet Information Services) et est activé par le premier message envoyé au service. L'implémentation de la classe ESCalculatorService
calcule et retourne le résultat approprié.
// Supporting implementation for the ICalculator interface.
public class ESCalculatorService : ServicedComponent, ICalculator
{
public double Add(double n1, double n2)
{
return n1 + n2;
}
public double Subtract(double n1, double n2)
{
return n1 - n2;
}
public double Multiply(double n1, double n2)
{
return n1 * n2;
}
public double Divide(double n1, double n2)
{
return n1 / n2;
}
}
Remarque : |
---|
La classe n'inclut pas de code spécifique à ServiceModel et est un assembly Enterprise Services classique attribué avec les attributs Enterprise Services, signé et ajouté au GAC (Global Assembly Cache). |
COM+ Service Model Configuration Tool (ComSvcConfig.exe) permet d'ajouter un service de prise en charge pour l'interface sélectionnée. La syntaxe suivante permet d'effectuer cette opération.
ComSvcConfig.exe /install /application:ServiceModelSample /contract:ServiceModelSample.ESCalculator,ICalculator hosting:was /webDirectory:ServiceModelSamples /mex /verbose
Dans ce cas, l'outil ajoute un service pour l'interface ICalculator
du composant ServiceModelSample.ESCalculator, lequel se trouve dans l'application ServiceModelSample. Le service est hébergé par IIS dans le répertoire virtuel ServiceModelSample. Le service ajouté expose un point de terminaison unique permettant de communiquer avec le service. Par défaut, l'adresse de point de terminaison permettant de communiquer avec le service est construite à partir du ProgID du composant (c'est-à-dire, https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc) ; cependant, elle peut être modifiée en modifiant le nom du fichier de service .svc. L'outil ajoute la configuration de la liaison du service au fichier Web.config. La configuration de la liaison du service a une liaison wsHttpBinding standard comme valeur par défaut, laquelle fournit des communications HTTP à l'aide de SOAP 1.2 et des standards de services Web pour l'adressage et la sécurité.
L'outil expose également un point de terminaison d'échange de métadonnées (MEX) à l'adresse https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc/mex, et permet d'accéder aux métadonnées WSDL d'un navigateur via HTTP GET à l'adresse https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc?wsdl. Ces fonctionnalités de métadonnées peuvent être désactivées en omettant l'option d'outil /mex.
Le contrat de service est dérivé directement de l'interface ICalculator
et est équivalent à la définition ServiceContract suivante.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
Le client communique sur un contrat à l'aide d'un client généré par Service Metadata Utility Tool (Svcutil.exe). Le client est contenu dans le fichier generatedClient.cs. Cet utilitaire récupère les métadonnées pour un service et génère un client permettant de communiquer sur un type de contrat. Le service hébergé doit être disponible pour générer le code proxy, car il permet de récupérer les métadonnées mises à jour. Exécutez la commande suivante à partir d'une invite de commandes dans le répertoire client pour générer le proxy typé :
svcutil.exe /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc/mex /out:generatedClient.cs
Le client généré permettant de communiquer sur un contrat donné, il peut accéder à un point de terminaison de service donné en configurant l'adresse et la liaison appropriées. À l'instar du service, le client utilise un fichier de configuration (App.config) pour spécifier le point de terminaison avec lequel il communique. La configuration de point de terminaison de client se compose d'un nom de configuration, d'une adresse absolue pour le point de terminaison de service, de la liaison et du contrat.
<system.serviceModel>
<client>
<endpoint
address="https://localhost/ServiceModelSamples/servicemodelsample.escalculator.svc/ICalculator"
binding="wsHttpBinding"
bindingConfiguration="comNonTransactionalBinding"
contract="ICalculator" />
</client>
<bindings>
<wsHttpBinding>
<binding name="comNonTransactionalBinding" >
<reliableSession enabled="true"/>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
L'implémentation cliente construit une instance du client généré. Elle permet ensuite de commencer à communiquer avec le service.
// Create a client.
CalculatorClient client = new CalculatorClient();
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
// Call the Subtract service operation.
value1 = 145.00D;
value2 = 76.54D;
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);
// Call the Multiply service operation.
value1 = 9.00D;
value2 = 81.25D;
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);
// Call the Divide service operation.
value1 = 22.00D;
value2 = 7.00D;
result = client.Divide(value1, value2);
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
//Closing the client gracefully closes the connection and cleans up resources.
client.Close();
Lorsque vous exécutez l'exemple, les demandes et réponses d'opération s'affichent dans la fenêtre de console cliente. Cet exemple montre l'utilisation du service WCF généré à partir d'un client WCF. Appuyez sur ENTER dans la fenêtre du client pour l'arrêter.
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Press <ENTER> to terminate client.
Pour configurer et générer l'exemple
Assurez-vous d'avoir effectué la procédure indiquée dans la section Procédure d'installation unique pour les exemples Windows Communication Foundation.
Pour générer l'édition C# ou Visual Basic .NET de la solution, suivez les instructions indiquées dans Génération des exemples Windows Communication Foundation.
Assurez-vous que \InetPub\wwwroot\ServiceModelSamples et son sous-répertoire bin sont vides.
À partir d'une invite de commandes, naviguez jusqu'au dossier service\bin de l'exemple. Si vous utilisez Windows Vista ou Windows Server 2008, exécutez l'invite de commandes en tant qu'administrateur.
Entrez gacutil.exe /i ESCalculator.dll pour ajouter l'assembly au GAC (Global Assembly Cache). Vérifiez que Gacutil.exe est dans votre chemin d'accès.
Entrez regsvcs.exe ESCalculator.dll pour enregistrer le composant de l'assembly et l'application ServiceModelSample avec COM+. Vérifiez que Regsvcs.exe est dans votre chemin d'accès.
Entrez ComSvcConfig.exe /install /application:ServiceModelSample /contract:"ServiceModelSample.ESCalculator,ICalculator" /hosting:was /webDirectory:ServiceModelSamples /mex /verbose pour exposer l'interface en tant que service hébergé par IIS.
Vérifiez que ComSvcConfig.exe est dans votre chemin d'accès.
Pour exécuter l'exemple sur le même ordinateur
Assurez-vous que les services sont accessibles à l'aide d'un navigateur en entrant l'adresse suivante : https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc. https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc. Une page de confirmation doit s'afficher en réponse.
Exécutez Client.exe à partir du dossier \client\bin\ figurant dans le dossier correspondant à votre langue. L'activité du client s'affiche dans sa fenêtre de console.
Si le client et le service ne parviennent pas à communiquer, consultez Conseils de dépannage.
Remarque : L'exemple construit un programme client d'application console. Vous devez le lancer à l'aide d'une invite de commandes pour afficher son résultat.
Pour exécuter l'exemple sur plusieurs ordinateurs
Créez un répertoire virtuel nommé ServiceModelSamples sur l'ordinateur de service. Le script Setupvroot.bat inclus avec Instructions d'installation du répertoire virtuel permet de créer le répertoire de disque et le répertoire virtuel.
Copiez le fichier ESCalculator.dll du répertoire service\bin dans un répertoire sur l'ordinateur de service.
À partir d'une invite de commandes, naviguez jusqu'à ce répertoire de destination. Si vous utilisez Windows Vista ou Windows Server 2008, exécutez l'invite de commandes en tant qu'administrateur.
Entrez gacutil.exe /i ESCalculator.dll sur l'ordinateur de service pour ajouter l'assembly au GAC (Global Assembly Cache).
Entrez regsvcs.exe ESCalculator.dll sur l'ordinateur de service pour enregistrer le composant de l'assembly et l'application ServiceModelSample avec COM+.
Entrez ComSvcConfig.exe /install /application:ServiceModelSample /contract:"ServiceModelSample.ESCalculator,ICalculator" /hosting:was /webDirectory:ServiceModelSamples /mex /verbose sur l'ordinateur de service pour exposer le contrat en tant que service hébergé par IIS.
Copiez les fichiers programme du client du dossier \client\bin\ (situé dans le dossier correspondant à votre langue) sur l'ordinateur client.
Dans le fichier de configuration client, modifiez la valeur d'adresse de la définition de point de terminaison afin qu'elle corresponde à la nouvelle adresse de votre service. Remplacez toutes les occurrences de localhost par un nom de domaine complet dans l'adresse.
Assurez-vous que le service est accessible depuis l'ordinateur client à l'aide d'un navigateur.
Sur l'ordinateur client, lancez Client.exe à partir d'une invite de commandes.
Pour procéder au nettoyage après exécution de l'exemple
Si vous utilisez Windows Vista ou Windows Server 2008, exécutez l'invite de commandes en tant qu'administrateur. Entrez ComSvcConfig.exe /u /application:ServiceModelSample /contract:ServiceModelSample.ESCalculator,ICalculator pour désinstaller l'intégration COM+.
Entrez regsvcs.exe /u ESCalculator.dll pour désinstaller l'application de COM+.
Entrez gacutil.exe /u ESCalculator pour supprimer le composant du GAC (Global Assembly Cache).
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.