Freigeben über


Exportieren und Importieren von Metadaten

In Windows Communication Foundation (WCF) wird unter dem Metadatenexport der Vorgang verstanden, mit dem die Dienstendpunkte beschrieben und in eine parallele, standardisierte Darstellung projiziert werden, aus der die Clients entnehmen können, wie der Dienst zu nutzen ist. Beim Import von Dienstmetadaten werden ServiceEndpoint-Instanzen oder Teile davon aus Dienstmetadaten generiert.

Exportieren von Metadaten

Mit einer Implementierung der abstrakten MetadataExporter-Klasse können Sie Metadaten aus System.ServiceModel.Description.ServiceEndpoint-Instanzen exportieren. Der WsdlExporter-Typ stellt die Implementierung der abstrakten MetadataExporter-Klasse in WCF dar.

Der System.ServiceModel.Description.WsdlExporter-Typ generiert WSDL (Web Services Description Language)-Metadaten mit angefügten Richtlinienausdrücken, die in einer MetadataSet-Instanz gekapselt sind. Sie können eine System.ServiceModel.Description.WsdlExporter-Instanz verwenden, um Metadaten für ContractDescription-Objekte und ServiceEndpoint-Objekte iterativ zu exportieren. Sie können auch eine Auflistung von ServiceEndpoint-Objekten exportieren und sie einem bestimmten Dienstnamen zuordnen.

Tipp

WsdlExporter kann nur zum Exportieren von Metadaten aus ContractDescription-Instanzen verwendet werden, die Common Language Runtime (CLR)-Typinformationen enthalten, wie z. B. eine ContractDescription-Instanz, die mit der ContractDescription.GetContract-Methode oder als Teil der ServiceDescription für eine ServiceHost-Instanz erstellt wurde. Sie können WsdlExporter nicht zum Exportieren von Metadaten aus ContractDescription-Instanzen verwenden, die aus Dienstmetadaten stammen oder ohne Typinformationen erstellt wurden.

Importieren von Metadaten

Importieren von WSDL-Dokumenten

Mit einer Implementierung der abstrakten MetadataImporter-Klasse können Sie Metadaten von Diensten in WCF importieren. Der System.ServiceModel.Description.WsdlImporter-Typ stellt die Implementierung der abstrakten MetadataImporter-Klasse in WCF dar. Der WsdlImporter-Typ importiert WSDL-Metadaten mit angefügten Richtlinien, die in einem MetadataSet-Objekt zusammengefasst sind.

Beim WsdlImporter-Typ können Sie steuern, wie die Metadaten importiert werden. Sie können alle Endpunkte, alle Bindungen oder alle Verträge importieren. Sie können alle Endpunkte importieren, die einem bestimmten WSDL-Dienst, einer bestimmten Bindung oder einem bestimmten Anschlusstyp zugeordnet sind. Zudem können Sie den Endpunkt für einen bestimmten WSDL-Anschluss, die Bindung für eine bestimmte WSDL-Bindung oder den Vertag für einen bestimmten WSDL-Anschlusstyp importieren.

Der WsdlImporter-Typ macht die KnownContracts-Eigenschaft verfügbar, die es Ihnen ermöglicht, eine Gruppe von Verträgen anzugeben, die nicht importiert werden müssen. Der WsdlImporter-Typ verwendet die in der KnownContracts-Eigenschaft angegebenen Verträge, statt aus den Metadaten Verträge zu importieren, die über den gleichen qualifizierten Namen verfügen.

Importieren von Richtlinien

Der WsdlImporter-Typ sammelt die Richtlinienausdrücke, die den Nachrichten-, Vorgangs- und Endpunktrichtliniensubjekts angehängt sind, und importiert die Richtlinienausdrücke dann mithilfe der IPolicyImportExtension-Implementierungen aus der PolicyImportExtensions-Auflistung.

Das Richtlinienimportprogramm verarbeitet automatisch Richtlinienverweise auf Richtlinienausdrücke im gleichen WSDL-Dokument und wird durch das wsu:Id-Attribut oder das xml:id-Attribut angegeben. Das Richtlinienimportprogramm schützt Anwendungen vor zirkulären Verweisen, indem es die Größe von Richtlinienausdrücken auf 4096 Knoten beschränkt, wobei ein Knoten eines der folgenden Elemente sein kann: wsp:Policy, wsp:All, wsp:ExactlyOne, wsp:policyReference.

Das Richtlinienimportprogramm normalisiert Richtlinienausdrücke auch automatisch. Geschachtelte Richtlinienausdrücke und das wsp:Optional-Attribut werden nicht normalisiert. Die normalisierte Verarbeitung wird auf höchsten 4096 Schritte beschränkt, wobei jeder Schritt eine Richtlinienassertion oder ein untergeordnetes Element eines wsp:ExactlyOne-Elements ergibt.

Der WsdlImporter-Typ probiert bis zu 32 Kombinationen von Richtlinienalternativen aus, die verschiedenen WSDL-Richtliniensubjekten angehängt sind. Wenn keine Kombination sauber importiert werden kann, wird die erste Kombination zur Erstellung einer teilweise benutzerdefinierten Bindung verwendet.

Fehlerbehandlung

Sowohl der MetadataExporter-Typ als auch der MetadataImporter-Typ machen eine Errors-Eigenschaft verfügbar, die eine Auflistung von Meldungen für Fehler und Warnungen enthalten kann, die während des Export- bzw. Importprozesses auftreten können und die in der Implementierung von Dienstprogrammen verwendet werden können.

Der WsdlImporter-Typ löst im Allgemeinen eine Ausnahme für jede Ausnahme aus, die während des Importvorgangs abgefangen wurde, und fügt der Errors-Eigenschaft einen entsprechenden Fehler hinzu. Da die Methoden ImportAllContracts, ImportAllBindings, ImportAllEndpoints und ImportEndpoints diese Ausnahmen dagegen nicht auslösen, müssen Sie die Errors-Eigenschaft überprüfen, um zu ermitteln, ob während des Aufrufs dieser Methoden Probleme aufgetreten sind.

Der WsdlExporter Typ löst entsprechende Ausnahmen für alle während des Exportprozesses abgefangenen Ausnahmen aus. Diese Ausnahmen werden nicht als Fehler in der Errors-Eigenschaft aufgezeichnet. Sobald der WsdlExporter-Typ eine Ausnahme auslöst, hat er in einen Fehlerstatus und kann nicht wiederverwendet werden. Der WsdlExporter-Typ fügt seiner Errors-Eigenschaft Warnungen hinzu, wenn ein Vorgang nicht exportiert werden kann, weil er Platzhalteraktionen verwendet, und wenn doppelte Bindungsnamen auftreten.

In diesem Abschnitt

Referenz

WsdlExporter

WsdlImporter

Siehe auch

Konzepte

Exportieren von benutzerdefinierten Metadaten für eine WCF-Erweiterung
Importieren von benutzerdefinierten Metadaten für eine WCF-Erweiterung