Sdílet prostřednictvím


Načítání metadat

Ukázka RetrieveMetadata ukazuje, jak implementovat klienta, který dynamicky načítá metadata ze služby, aby zvolil koncový bod, se kterým má komunikovat. Tato ukázka je založená na začínáme. Služba byla upravena tak, aby zpřístupnila dva koncové body – koncový bod na základní adrese pomocí basicHttpBinding vazby a zabezpečený koncový bod v {baseaddress}/secure pomocí vazbywsHttpBinding. Místo konfigurace klienta s adresami a vazbami koncového bodu klient dynamicky načte metadata pro službu pomocí MetadataExchangeClient třídy a pak naimportuje metadata jako ServiceEndpointCollection použití WsdlImporter třídy.

Poznámka:

Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.

Klientská aplikace používá importované ServiceEndpointCollection k vytvoření klientů pro komunikaci se službou. Klientská aplikace iteruje každý načtený koncový bod a komunikuje s každým koncovým bodem, který implementuje ICalculator kontrakt. Odpovídající adresa a vazba jsou k dispozici s načteným koncovým bodem, aby klient byl nakonfigurovaný tak, aby komunikoval s každým koncovým bodem, jak je znázorněno v následujícím vzorovém kódu.

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

V okně konzoly klienta se zobrazí operace odeslané do každého koncového bodu a zobrazí se cesta adresy a název vazby.

Nastavení, sestavení a spuštění ukázky

  1. Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.

  2. Pokud chcete sestavit edici C#, C++ nebo Visual Basic .NET řešení, postupujte podle pokynů v části Sestavení ukázek windows Communication Foundation.

  3. Pokud chcete spustit ukázku v konfiguraci s jedním nebo více počítači, postupujte podle pokynů v části Spuštění ukázek windows Communication Foundation.