Delen via


Metagegevens ophalen

Het Voorbeeld RetrieveMetadata laat zien hoe u een client implementeert die dynamisch metagegevens ophaalt uit een service om een eindpunt te kiezen waarmee moet worden gecommuniceerd. Dit voorbeeld is gebaseerd op aan de slag. De service is gewijzigd om twee eindpunten beschikbaar te maken: een eindpunt op het basisadres met behulp van de basicHttpBinding binding en een beveiligd eindpunt op {baseaddress}/secure met behulp van de wsHttpBinding binding. In plaats van de client te configureren met de eindpuntadressen en bindingen, haalt de client de metagegevens voor de service dynamisch op met behulp van de MetadataExchangeClient klasse en importeert de metagegevens vervolgens als een ServiceEndpointCollection met behulp van de WsdlImporter klasse.

Notitie

De installatieprocedure en build-instructies voor dit voorbeeld bevinden zich aan het einde van dit onderwerp.

De clienttoepassing gebruikt de geïmporteerde ServiceEndpointCollection clienttoepassing om clients te maken om te communiceren met de service. De clienttoepassing doorloopt elk opgehaald eindpunt en communiceert met elk eindpunt dat het ICalculator contract implementeert. Het juiste adres en de juiste binding worden geleverd met het opgehaalde eindpunt, zodat de client is geconfigureerd voor communicatie met elk eindpunt, zoals wordt weergegeven in de volgende voorbeeldcode.

// 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();
    }
}

In het clientconsolevenster worden de bewerkingen weergegeven die naar elk van de eindpunten worden verzonden, waarbij het adrespad en de bindingsnaam worden weergegeven.

Het voorbeeld instellen, compileren en uitvoeren

  1. Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.

  2. Als u de C#-, C++- of Visual Basic .NET-editie van de oplossing wilt bouwen, volgt u de instructies in het bouwen van de Windows Communication Foundation-voorbeelden.

  3. Als u het voorbeeld wilt uitvoeren in een configuratie met één of meerdere computers, volgt u de instructies in Het uitvoeren van de Windows Communication Foundation-voorbeelden.