Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’exemple RetrieveMetadata montre comment implémenter un client qui récupère dynamiquement les métadonnées d’un service pour choisir un point de terminaison avec lequel communiquer. Cet exemple est basé sur la section Getting Started. Le service a été modifié pour exposer deux points de terminaison : un point de terminaison à l’adresse de base à l’aide de la basicHttpBinding liaison et un point de terminaison sécurisé sur {baseaddress}/secure à l’aide de la wsHttpBinding liaison. Au lieu de configurer le client avec les adresses et liaisons de point de terminaison, le client récupère dynamiquement les métadonnées du service à l’aide de la MetadataExchangeClient classe, puis importe les métadonnées en tant que ServiceEndpointCollection classe à l’aide de la WsdlImporter classe.
Remarque
La procédure d’installation et les instructions de génération de cet exemple se trouvent à la fin de cette rubrique.
L’application cliente utilise l’importation ServiceEndpointCollection pour créer des clients pour communiquer avec le service. L’application cliente effectue une itération via chaque point de terminaison récupéré et communique avec chaque point de terminaison qui implémente le ICalculator contrat. L’adresse et la liaison appropriées sont fournies avec le point de terminaison récupéré, afin que le client soit configuré pour communiquer avec chaque point de terminaison, comme indiqué dans l’exemple de code suivant.
// Create a MetadataExchangeClient for retrieving metadata.
EndpointAddress mexAddress = new EndpointAddress(ConfigurationManager.AppSettings["mexAddress"]);
MetadataExchangeClient mexClient = new MetadataExchangeClient(mexAddress);
// Retrieve the metadata for all endpoints using metadata exchange protocol (mex).
MetadataSet metadataSet = mexClient.GetMetadata();
//Convert the metadata into endpoints.
WsdlImporter importer = new WsdlImporter(metadataSet);
ServiceEndpointCollection endpoints = importer.ImportAllEndpoints();
CalculatorClient client = null;
ContractDescription contract = ContractDescription.GetContract(typeof(ICalculator));
// Communicate with each endpoint that supports the ICalculator contract.
foreach (ServiceEndpoint ep in endpoints)
{
if (ep.Contract.Namespace.Equals(contract.Namespace) && ep.Contract.Name.Equals(contract.Name))
{
// Create a client using the endpoint address and binding.
client = new CalculatorClient(ep.Binding, new EndpointAddress(ep.Address.Uri));
Console.WriteLine("Communicate with endpoint: ");
Console.WriteLine(" AddressPath={0}", ep.Address.Uri.PathAndQuery);
Console.WriteLine(" Binding={0}", ep.Binding.Name);
// Call operations.
DoCalculations(client);
//Closing the client gracefully closes the connection and cleans up resources.
client.Close();
}
}
La fenêtre de console cliente affiche les opérations envoyées à chacun des points de terminaison, avec le chemin d'accès et le nom de liaison.
Pour configurer, générer et exécuter l’exemple
Assurez-vous d’avoir effectué la Procédure d’installation unique pour les exemples Windows Communication Foundation.
Pour générer l’édition C#, C++ ou Visual Basic .NET de la solution, suivez les instructions de création des exemples Windows Communication Foundation.
Pour exécuter l’exemple dans une configuration à un ou plusieurs ordinateurs, conformez-vous aux instructions figurant dans la rubrique Exécution des exemples Windows Communication Foundation.