Freigeben über


Vorgehensweise: Die Verwendung von MetadataExchangeClient zum Abrufen von Metadaten

Verwenden Sie die MetadataExchangeClient-Klasse, um Metadaten mit dem WS-MetadataExchange (MEX)-Protokoll herunterzuladen. Die abgerufenen Metadatendateien werden als MetadataSet-Objekt zurückgegeben. Das zurückgegebene MetadataSet-Objekt enthält eine Auflistung der MetadataSection-Objekte, von denen jedes einen bestimmten Metadatendialekt sowie eine ID enthält. Sie können die zurückgegebenen Metadaten in Dateien schreiben. Wenn die zurückgegebenen Metadaten WSDL (Web Services Description Language)-Dokumente enthalten, können Sie die Metadaten mit WsdlImporter importieren.

Die MetadataExchangeClient-Konstruktoren, die eine Adresse enthalten, verwenden die Bindung der statischen MetadataExchangeBindings-Klasse, die dem URL-(Uniform Resource Identifier-)Schema der Adresse entspricht. Sie können als Alternative auch den MetadataExchangeClient-Konstruktor verwenden, mit dem Sie die zu verwendende Bindung ausdrücklich angeben können. Die angegebene Bindung wird zum Auflösen aller Metadatenverweise verwendet.

Wie jeder andere Windows Communication Foundation (WCF) Client bietet der MetadataExchangeClient-Typ einen Konstruktor zum Laden von Client-Endpunktkonfigurationen unter Verwendung des Endpunktkonfigurationsnamens. Die angegebene Endpunktkonfiguration muss den IMetadataExchange-Vertrag angeben. Die Adresse der Endpunktkonfiguration ist nicht geladen. Deshalb müssen Sie eine der GetMetadata-Überladungen verwenden, die eine Adresse verwenden. Wenn Sie die Metadatenadresse mit einer EndpointAddress-Instanz angeben, geht MetadataExchangeClient davon aus, dass die Adresse auf einen MEX-Endpunkt verweist. Wenn Sie die Metadatenadresse als URL angeben, müssen Sie auch angeben, welcher MetadataExchangeClientMode verwendet werden soll, MEX oder HTTP GET.

Wichtig

Standardmäßig löst MetadataExchangeClient alle Verweise auf, einschließlich WSDL- und XML-Schemaimporte und -Includes. Sie können diese Funktion deaktivieren, indem Sie die Eigenschaft ResolveMetadataReferences auf false festlegen. Sie können die maximale Anzahl von aufzulösenden Verweisen mithilfe der MaximumResolvedReferences-Eigenschaft steuern. Sie können diese Eigenschaft zusammen mit der MaxReceivedMessageSize-Eigenschaft für die Bindung verwenden, um zu steuern, wie viele Metadaten abgerufen werden.

So verwenden Sie MetadataExchangeClient zum Abrufen von Metadaten

  1. Erstellen Sie ein neues MetadataExchangeClient-Objekt, indem Sie ausdrücklich eine Bindung, einen Endpunktkonfigurationsnamen oder die Adresse der Metadaten angeben.

  2. Konfigurieren Sie MetadataExchangeClient, um ihn an Ihre Anforderungen anzupassen. So können Sie z. B. Anmeldeinformationen angeben, die verwendet werden, wenn Metadaten angefordert werden. Und Sie können die OperationTimeout-Eigenschaft festlegen, um zu steuern, wie lange die Metadatenanforderung zurückgegeben werden muss, bevor das Zeitlimit überschritten wird.

  3. Rufen Sie das MetadataSet-Objekt ab, das die abgerufenen Metadaten enthält, indem Sie eine der GetMetadata-Methoden aufrufen. Beachten Sie, dass Sie lediglich die GetMetadata-Überladung verwenden können, die keine Argumente aufnimmt, wenn Sie beim Erstellen von MetadataExchangeClient ausdrücklich eine Adresse angegeben haben.

Beispiel

Im folgenden Codebeispiel wird die Verwendung von MetadataExchangeClient dargestellt, mit dem Metadatendateien heruntergeladen und aufgelistet werden.

// Get metadata documents.
Console.WriteLine("URI of the metadata documents retrieved:");
MetadataExchangeClient metaTransfer
  = new MetadataExchangeClient(httpGetMetaAddress.Uri, MetadataExchangeClientMode.HttpGet);
metaTransfer.ResolveMetadataReferences = true;
MetadataSet otherDocs = metaTransfer.GetMetadata();
foreach (MetadataSection doc in otherDocs.MetadataSections)
    Console.WriteLine(doc.Dialect + " : " + doc.Identifier);

Kompilieren des Codes

Um dieses Codebeispiel zu kompilieren, müssen Sie die System.ServiceModel.dll-Assembly mit Verweisen versehen und den System.ServiceModel.Description-Namespace importieren.

Siehe auch