Megosztás a következőn keresztül:


Metaadatok lekérése

A RetrieveMetadata minta bemutatja, hogyan implementálhat egy olyan ügyfelet, amely dinamikusan lekéri a metaadatokat egy szolgáltatásból egy végpont kiválasztásához, amellyel kommunikálni szeretne. Ez a minta az első lépéseken alapul. A szolgáltatás úgy lett módosítva, hogy két végpontot tegyen elérhetővé : egy végpontot az alapcímen a kötés használatával, és egy biztonságos végpontot a basicHttpBinding ({baseaddress}) helyen/biztonságos helyen a wsHttpBinding kötés használatával. Ahelyett, hogy a végpontcímekkel és kötésekkel konfigurálja az ügyfelet, az ügyfél dinamikusan lekéri a szolgáltatás metaadatait az MetadataExchangeClient osztály használatával, majd importálja a metaadatokat ServiceEndpointCollection az WsdlImporter osztály használatával.

Feljegyzés

A minta telepítési eljárása és összeállítási utasításai a témakör végén találhatók.

Az ügyfélalkalmazás az importált ServiceEndpointCollection használatával hoz létre ügyfeleket a szolgáltatással való kommunikációhoz. Az ügyfélalkalmazás minden lekért végponton keresztül iterál, és kommunikál a ICalculator szerződést megvalósító végpontokkal. A megfelelő címet és kötést a lekért végpont biztosítja, hogy az ügyfél konfigurálva legyen az egyes végpontokkal való kommunikációra, ahogyan az az alábbi mintakódban látható.

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

Az ügyfélkonzol ablaka megjeleníti az egyes végpontoknak küldött műveleteket, és megjeleníti a cím elérési útját és a kötés nevét.

A minta beállítása, összeállítása és futtatása

  1. Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták egyszeri beállítási eljárását.

  2. A megoldás C#, C++ vagy Visual Basic .NET kiadásának létrehozásához kövesse a Windows Communication Foundation-minták készítésének utasításait.

  3. Ha a mintát egy vagy több gép közötti konfigurációban szeretné futtatni, kövesse a Windows Communication Foundation-minták futtatásával kapcsolatos utasításokat.