Delen via


Aangepaste metagegevens importeren voor een WCF-extensie

In Windows Communication Foundation (WCF) is het importeren van metagegevens het proces voor het genereren van een abstracte weergave van een service of onderdelen ervan op basis van de metagegevens. WCF kan bijvoorbeeld exemplaren, Binding exemplaren of ContractDescription exemplaren importeren ServiceEndpoint uit een WSDL-document voor een service. Als u servicemetagegevens wilt importeren in WCF, gebruikt u een implementatie van de System.ServiceModel.Description.MetadataImporter abstracte klasse. Typen die zijn afgeleid van de MetadataImporter klasse implementeren ondersteuning voor het importeren van metagegevensindelingen die gebruikmaken van de WS-Policy-importlogica in WCF.

Aangepaste metagegevens bestaan uit XML-elementen die de door het systeem geleverde metagegevensimporteurs niet kunnen importeren. Dit omvat doorgaans aangepaste WSDL-extensies en aangepaste beleidsverklaringen.

In deze sectie wordt beschreven hoe u aangepaste WSDL-extensies en beleidsverklaringen importeert. Het is niet gericht op het importproces zelf. Zie Exporteren en importeren van metagegevens voor meer informatie over het gebruik van de typen die metagegevens exporteren en importeren, ongeacht of de metagegevens aangepast of door het systeem worden ondersteund.

Overzicht

Het System.ServiceModel.Description.WsdlImporter type is de implementatie van de MetadataImporter abstracte klasse die is opgenomen in WCF. Met het WsdlImporter type worden WSDL-metagegevens geïmporteerd met gekoppelde beleidsregels die zijn gebundeld in een System.ServiceModel.Description.MetadataSet object. Beleidsverklaringen en WSDL-extensies die de standaardimporteurs niet herkennen, worden doorgegeven aan geregistreerde aangepaste beleidsregels en WSDL-importeurs voor invoer. Normaal gesproken worden importeurs geïmplementeerd ter ondersteuning van door de gebruiker gedefinieerde bindingselementen of om het geïmporteerde contract te wijzigen.

In deze sectie wordt het volgende beschreven:

  1. De interface implementeren en gebruiken System.ServiceModel.Description.IWsdlImportExtension , die de WSDL-gegevens beschikbaar maakt voor aangepaste importeurs vóór het genereren van beschrijvingen en het genereren van code. U kunt deze interface gebruiken om de beschrijvingstypen en codecompilatie te onderzoeken of te wijzigen die worden uitgevoerd met behulp van een bepaalde set metagegevens.

  2. De interface implementeren en gebruiken System.ServiceModel.Description.IPolicyImportExtension , waarmee beleidsverklaringen voor importeurs worden weergegeven vóór het genereren van beschrijvingsobjecten. U kunt deze interface gebruiken om de binding of het contract te onderzoeken of te wijzigen op basis van het gedownloade beleid.

Zie Aangepaste metagegevens exporteren voor een WCF-extensie voor meer informatie over het exporteren van aangepaste WSDL- en beleidsverklaringen.

Aangepaste WSDL-extensies importeren

Als u ondersteuning wilt toevoegen voor het importeren van WSDL-extensies, implementeert u de IWsdlImportExtension interface en voegt u vervolgens uw implementatie toe aan de WsdlImportExtensions eigenschap. U WsdlImporter kunt ook implementaties laden van de IWsdlImportExtension interface die is geregistreerd in uw toepassingsconfiguratiebestand. Houd er rekening mee dat een aantal WSDL-importeurs standaard is geregistreerd en dat de volgorde van de geregistreerde WSDL-importeurs aanzienlijk is.

Wanneer de aangepaste WSDL-importfunctie wordt geladen en gebruikt door de WsdlImporter, wordt eerst de BeforeImport methode aangeroepen om de wijziging van metagegevens vóór het importproces mogelijk te maken. Vervolgens worden de contracten geïmporteerd waarna de ImportContract methode wordt aangeroepen om de wijziging van de contracten uit de metagegevens mogelijk te maken. Ten slotte wordt de ImportEndpoint methode aangeroepen om de wijziging van de geïmporteerde eindpunten in te schakelen.

Zie Instructies voor meer informatie : Aangepaste WSDL importeren.

Aangepaste beleidsverklaringen importeren

Het WsdlImporter type en het hulpprogramma hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe) verwerken automatisch verschillende typen beleidsbevestigingen in beleidsexpressies die zijn gekoppeld aan WSDL-documenten. Met deze hulpprogramma's worden beleidsexpressies verzameld, genormaliseerd en samengevoegd die zijn gekoppeld aan WSDL-bindingen en WSDL-poorten.

Als u ondersteuning wilt toevoegen voor het importeren van aangepaste beleidsverklaringen, implementeert u de IPolicyImportExtension interface en voegt u vervolgens uw implementatie toe aan de PolicyImportExtensions eigenschap. U MetadataImporter kunt ook implementaties laden van de IPolicyImportExtension interface die is geregistreerd in uw toepassingsconfiguratiebestand. Houd er rekening mee dat een aantal beleidsimporteurs standaard is geregistreerd en dat de volgorde van de geregistreerde beleidsimporteurs aanzienlijk is.

Het metagegevenssysteem roept herhaaldelijk de IPolicyImportExtension.ImportPolicy methode aan voor alle geregistreerde beleidsimportextensies voor elke combinatie van beleidsalternatieven die zijn gekoppeld aan de onderwerpen van het bericht, de bewerking en het eindpuntbeleid. Bij het importeren van een WSDL-poort worden beleidsregels die zijn gekoppeld aan de poort en de bijbehorende WSDL-binding samengevoegd voordat ze worden aangeroepen in de extensies voor het importeren van beleid. De beleidsalternatieven worden beschikbaar gesteld via een PolicyConversionContext as-object PolicyAssertionCollection . Elk PolicyAssertionCollection is een verzameling beleidsverklaringen die worden vertegenwoordigd door XmlElement objecten.

De Contract eigenschappen en BindingElements eigenschappen van het PolicyConversionContext object maken de ContractDescription en BindingElement objecten beschikbaar die zijn geïmporteerd uit de WSDL. Beleidsverklaringen voor het importeren van beleid worden verwerkt door exemplaren van een bepaald beleidsverklaringstype te zoeken, overeenkomstige wijzigingen aan te brengen in de ContractDescription of BindingElement objecten en vervolgens de beleidsverklaringen uit het bijbehorende PolicyAssertionCollection exemplaar te verwijderen.

De wsp:Optional kenmerk- en geneste beleidsexpressies worden niet genormaliseerd, dus beleidsimportextensies moeten deze beleidsconstructies verwerken. Ook kunnen extensies voor het importeren van beleid meerdere keren worden aangeroepen met hetzelfde ContractDescription en BindingElement objecten, zodat beleidsimportextensies robuust moeten zijn voor dit gedrag.

Belangrijk

Ongeldige of onjuiste metagegevens kunnen worden doorgegeven aan de importeur. Zorg ervoor dat aangepaste importeurs robuust zijn voor alle vormen van XML.

Zie ook