Importieren von benutzerdefinierten Metadaten für eine WCF-ErweiterungImporting Custom Metadata for a WCF Extension

In Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) wird beim Importieren von Metadaten eine abstrakte Darstellung eines Diensts oder seiner Komponenten aus dessen Metadaten generiert.In Windows Communication Foundation (WCF)Windows Communication Foundation (WCF), metadata import is the process of generating an abstract representation of a service or its component parts from its metadata. WCFWCF kann beispielsweise Instanzen von ServiceEndpoint, Binding oder ContractDescription aus einem WSDL-Dokument für einen Dienst importieren.For example, WCFWCF can import ServiceEndpoint instances, Binding instances or ContractDescription instances from a WSDL document for a service. Mit einer Implementierung der abstrakten WCFWCF-Klasse können Sie Metadaten von Diensten in System.ServiceModel.Description.MetadataImporter importieren.To import service metadata in WCFWCF, use an implementation of the System.ServiceModel.Description.MetadataImporter abstract class. Die Unterstützung für das Importieren von Metadatenformaten, die die Importlogik der WS-Richtlinie in MetadataImporter unterstützen, wird durch Typen implementiert, die von der WCFWCF-Klasse abgeleitet sind.Types that derive from the MetadataImporter class implement support for importing metadata formats that take advantage of the WS-Policy import logic in WCFWCF.

Benutzerdefinierte Metadaten bestehen aus XML-Elementen, die die Metadatenimportmechanismen des Systems nicht verarbeiten können.Custom metadata consists of XML elements that the system-provided metadata importers cannot import. Dazu gehören i. d. R. auch benutzerdefinierte WSDL-Erweiterungen sowie benutzerdefinierte Richtlinienassertionen.Typically, this includes custom WSDL extensions and custom policy assertions.

In diesem Abschnitt wird beschrieben, wie benutzerdefinierte WSDL-Erweiterungen und benutzerdefinierte Richtlinienassertionen importiert werden.This section describes how to import custom WSDL extensions and policy assertions. Dabei wird der eigentliche Importvorgang nur am Rande erläutert.It does not focus on the importing process itself. Weitere Informationen zur Verwendung von Typen, die exportieren und Importieren von Metadaten, unabhängig davon, ob die Metadaten benutzerdefinierte oder vom System unterstützt, finden Sie unter exportieren und Importieren von Metadaten.For more information about how to use the types that export and import metadata regardless of whether the metadata is custom or system-supported, see Exporting and Importing Metadata.

ÜbersichtOverview

Der System.ServiceModel.Description.WsdlImporter-Typ stellt die Implementierung der abstrakten MetadataImporter-Klasse in WCFWCF dar.The System.ServiceModel.Description.WsdlImporter type is the implementation of the MetadataImporter abstract class included with WCFWCF. Der WsdlImporter-Typ importiert WSDL-Metadaten mit angefügten Richtlinien, die in einem System.ServiceModel.Description.MetadataSet-Objekt zusammengefasst sind.The WsdlImporter type imports WSDL metadata with attached policies that are bundled in a System.ServiceModel.Description.MetadataSet object. Richtlinienassertionen und WSDL-Erweiterungen, die von den Standardimportern nicht erkannt werden, werden an eine registrierte benutzerdefinierte Richtlinie oder an einen registrierten WSDL-Importer übergeben, um sie zu importieren.Policy assertions and WSDL extensions that the default importers do not recognize are passed to any registered custom policy and WSDL importers for importing. Normalerweise werden Importer zur Unterstützung von benutzerdefinierten Bindungselementen oder zur Änderung des importierten Vertrags implementiert.Typically, importers are implemented to support user-defined binding elements or to modify the imported contract.

Dieser Abschnitt beschreibt:This section describes:

  1. Implementierung und Verwendung der System.ServiceModel.Description.IWsdlImportExtension-Schnittstelle, die die WSDL-Daten für benutzerdefinierte Importer verfügbar macht, bevor Beschreibungen und Code generiert werden.How to implement and use the System.ServiceModel.Description.IWsdlImportExtension interface, which exposes the WSDL data to custom importers prior to the generation of descriptions and the generation of code. Mit dieser Schnittstelle können Sie die Beschreibungen und die Codekompilierungen mit einem vorhandenen Satz von Metadaten untersuchen oder ändern.You can use this interface to examine or modify the description types and code compilation performed using a given set of metadata.

  2. Implementierung und Verwendung der System.ServiceModel.Description.IPolicyImportExtension-Schnittstelle, die die Richtlinienassertionen für Importer verfügbar macht, bevor Beschreibungsobjekte generiert werden.How to implement and use the System.ServiceModel.Description.IPolicyImportExtension interface, which exposes policy assertions to importers prior to the generation of description objects. Mit dieser Schnittstelle können Sie die Bindung oder den Vertrag anhand der heruntergeladenen Richtlinien untersuchen oder ändern.You can use this interface to examine or modify the binding or contract based on the downloaded policies.

Weitere Informationen zum Exportieren von benutzerdefinierten WSDL und Richtlinienassertionen finden Sie unter Exportieren von benutzerdefinierten Metadaten für eine WCF-Erweiterung.For more information about exporting custom WSDL and policy assertions, see Exporting Custom Metadata for a WCF Extension.

Importieren von benutzerdefinierten WSDL-ErweiterungenImporting Custom WSDL Extensions

Implementieren Sie die IWsdlImportExtension-Schnittstelle, und fügen Sie diese Implementierung der WsdlImportExtensions-Eigenschaft hinzu, um eine Unterstützung für das Importieren von WSDL-Erweiterungen hinzuzufügen.To add support for importing WSDL extensions, implement the IWsdlImportExtension interface and then add your implementation to the WsdlImportExtensions property. Der WsdlImporter kann auch Implementierungen der IWsdlImportExtension-Schnittstelle laden, die in der Konfigurationsdatei der Anwendung registriert sind.The WsdlImporter can also load implementations of the IWsdlImportExtension interface registered in your application configuration file. Einige WSDL-Importer sind standardmäßig registriert, und die Reihenfolge der registrierten WSDL-Importer ist von Bedeutung.Note that a number of WSDL importers are registered by default and the order of the registered WSDL importers is significant.

Wenn ein benutzerdefinierter WSDL-Importer geladen und vom WsdlImporter verwendet wird, wird zunächst die BeforeImport-Methode aufgerufen, um eine Änderung der Metadaten vor dem Import zu ermöglichen.When the custom WSDL importer is loaded and used by the WsdlImporter, first the BeforeImport method is called to enable the modification of metadata prior to the import process. Anschließend werden die Verträge importiert, und die ImportContract-Methode wird aufgerufen, um eine Änderung der aus den Metadaten importierten Verträge zu ermöglichen.Next, the contracts are imported after which the ImportContract method is called to enable the modification of the contracts imported from the metadata. Abschließend wird die ImportEndpoint-Methode aufgerufen, um die Änderung der importierten Endpunkte zu ermöglichen.Finally, the ImportEndpoint method is called to enable the modification of the imported endpoints.

Weitere Informationen finden Sie unter Vorgehensweise: Importieren benutzerdefinierte WSDL.For more information, see How to: Import Custom WSDL.

Importieren von benutzerdefinierten RichtlinienassertionenImporting Custom Policy Assertions

Die WsdlImporter Typ und die ServiceModel Metadata Utility Tool (Svcutil.exe) automatisch behandelt eine Vielzahl von Assertion Richtlinientypen in Richtlinienausdrücke, WSDL-Dokumente verarbeiten.The WsdlImporter type and the ServiceModel Metadata Utility Tool (Svcutil.exe) automatically handle processing a variety of policy assertion types in policy expressions attached to WSDL documents. Diese Tools erfassen, normalisieren, und führen Richtlinienausdrücke zusammen, die an WSDL-Bindungen und WSDL-Anschlüsse angefügt sind.These tools collect, normalize, and merge policy expressions attached to WSDL bindings and WSDL ports.

Implementieren Sie die IPolicyImportExtension-Schnittstelle, und fügen Sie diese Implementierung der PolicyImportExtensions-Eigenschaft hinzu, um eine Unterstützung für das Importieren von benutzerdefinierten Richtlinienassertionen hinzuzufügen.To add support for importing custom policy assertions, implement the IPolicyImportExtension interface and then add your implementation to the PolicyImportExtensions property. Der MetadataImporter kann auch Implementierungen der IPolicyImportExtension-Schnittstelle laden, die in der Konfigurationsdatei der Anwendung registriert sind.The MetadataImporter can also load implementations of the IPolicyImportExtension interface registered in your application configuration file. Einige Richtlinienimporter sind standardmäßig registriert, und die Reihenfolge der registrierten Richtlinienimporter ist von Bedeutung.Note that a number of policy importers are registered by default and the order of the registered policy importers is significant.

Die IPolicyImportExtension.ImportPolicy-Methode wird vom Metadatensystem wiederholt für alle registrierten Richtlinienimporterweiterungen aufgerufen. Dies geschieht für alle Kombinationen von Richtlinienalternativen, die an eine Nachricht, einen Vorgang oder an das Richtliniensubjekt eines Endpunkts angefügt sind.The metadata system repeatedly calls the IPolicyImportExtension.ImportPolicy method on all registered policy import extensions for each combination of policy alternatives attached to the message, operation, and endpoint policy subjects. Beim Importieren eines WSDL-Anschlusses werden die an den Anschluss angefügten Richtlinien sowie die entsprechenden WSDL-Bindungen vor einem Aufruf in die Richtlinienimporterweiterungen zusammengeführt.When importing a WSDL port, policies attached to the port and to the corresponding WSDL binding are merged before calling into the policy import extensions. Die Richtlinienalternativen werden durch einen PolicyConversionContext als PolicyAssertionCollection-Objekte verfügbar gemacht.The policy alternatives are made available through a PolicyConversionContext as PolicyAssertionCollection objects. Jede PolicyAssertionCollection ist eine Auflistung von Richtlinienassertionen, die durch XmlElement-Objekte dargestellt wird.Each PolicyAssertionCollection is a collection of policy assertions represented by XmlElement objects.

Die Contract-Eigenschaft und die BindingElements-Eigenschaft des PolicyConversionContext-Objekts machen das ContractDescription-Objekt und das BindingElement-Objekt verfügbar, die aus der WSDL importiert wurden.The Contract and BindingElements properties on the PolicyConversionContext object expose the ContractDescription and BindingElement objects that were imported from the WSDL. Richtlinienassertionen werden von Richtlinienimporterweiterungen verarbeitet, indem Instanzen eines bestimmten Richtlinienassertionstyps gesucht und entsprechende Änderungen am ContractDescription-Objekt oder an BindingElement-Objekten vorgenommen und die Richtlinienassertionen anschließend aus der entsprechenden PolicyAssertionCollection-Instanz entfernt werden.Policy import extensions process policy assertions by finding instances of a particular policy assertion type, making corresponding changes to the ContractDescription or BindingElement objects and then removing the policy assertions from the corresponding PolicyAssertionCollection instance.

Das wsp:Optional-Attribut sowie geschachtelte Richtlinienausdrücke werden nicht normalisiert, sodass diese Richtlinienkonstrukte von Richtlinienimporterweiterungen behandelt werden müssen.The wsp:Optional attribute and nested policy expressions are not normalized, so policy import extensions must handle these policy constructs. Richtlinienimporterweiterungen können außerdem mehrmals mit dem gleichen ContractDescription- und BindingElement-Objekt aufgerufen werden, sodass Richtlinienimporterweiterungen diesem Verhalten gegenüber robust sein sollten.Also, policy import extensions may be called multiple times with the same ContractDescription and BindingElement objects, so policy import extensions should be robust to this behavior.

Wichtig

Ungültige oder fehlerhafte Metadaten können an den Importer übergeben werden.Invalid or improper metadata can be passed to the importer. Stellen Sie sicher, dass benutzerdefinierte Importer gegenüber allen Arten von XML robust sind.Ensure that custom importers are robust to all forms of XML.

Siehe auchSee Also

Vorgehensweise: Importieren von benutzerdefinierter WSDLHow to: Import Custom WSDL
Vorgehensweise: Importieren von benutzerdefinierten RichtlinienassertionenHow to: Import Custom Policy Assertions
Vorgehensweise: Schreiben einer Erweiterung für den ServiceContractGeneratorHow to: Write an Extension for the ServiceContractGenerator