Sdílet prostřednictvím


Import vlastních metadat pro rozšíření WCF

Ve Windows Communication Foundation (WCF) je proces importu metadat generující abstraktní reprezentaci služby nebo jejích součástí z jeho metadat. WCF může například importovat ServiceEndpoint instance, Binding instance nebo ContractDescription instance z dokumentu WSDL pro službu. Chcete-li importovat metadata služby ve WCF, použijte implementaci System.ServiceModel.Description.MetadataImporter abstraktní třídy. Typy odvozené z MetadataImporter třídy implementují podporu importu formátů metadat, které využívají WS-Policy logiku importu ve WCF.

Vlastní metadata se skládají z elementů XML, které nemohou importovat systémoví dodavatelé metadat. Obvykle to zahrnuje vlastní rozšíření WSDL a vlastní deklarace zásad.

Tato část popisuje, jak importovat vlastní rozšíření WSDL a výrazy zásad. Nezaměřuje se na samotný proces importu. Další informace o tom, jak používat typy, které exportují a importují metadata bez ohledu na to, jestli jsou metadata vlastní nebo systémová, najdete v tématu Export a import metadat.

Přehled

Typ System.ServiceModel.Description.WsdlImporter je implementace MetadataImporter abstraktní třídy, která je součástí WCF. Typ WsdlImporter importuje metadata WSDL s připojenými zásadami, které jsou součástí objektu System.ServiceModel.Description.MetadataSet . Deklarace zásad a rozšíření WSDL, které výchozí importéři nerozpoznávají, se předávají všem registrovaným vlastním importérům zásad a WSDL k dalšímu importu. Obvykle se importéři implementují tak, aby podporovali uživatelem definované vazbové prvky nebo upravili importovanou smlouvu.

Tato část popisuje:

  1. Jak implementovat a používat System.ServiceModel.Description.IWsdlImportExtension rozhraní, které zveřejňuje data WSDL vlastním dovozcům před generováním popisů a generování kódu. Toto rozhraní můžete použít k prozkoumání nebo úpravě typů popisu a kompilace kódu prováděné pomocí dané sady metadat.

  2. Jak implementovat a používat System.ServiceModel.Description.IPolicyImportExtension rozhraní, které poskytuje deklarace zásad importérům před generováním objektů popisu. Toto rozhraní můžete použít k prozkoumání nebo úpravě vazby nebo kontraktu na základě stažených zásad.

Další informace o exportu vlastních kontrolních výrazů WSDL a zásad naleznete v tématu Export vlastních metadat pro rozšíření WCF.

Import vlastních rozšíření WSDL

Chcete-li přidat podporu pro import rozšíření WSDL, implementujte IWsdlImportExtension rozhraní a pak přidejte implementaci do WsdlImportExtensions vlastnosti. WsdlImporter může také načíst implementace rozhraní registrovaných v konfiguračním souboru vaší aplikace. Všimněte si, že ve výchozím nastavení je registrováno několik dovozců WSDL a pořadí registrovaných dovozců WSDL je významné.

Při načtení a použití vlastního importéru WSDL pomocí WsdlImporter je nejprve volána metoda BeforeImport k povolení úpravy metadat před zahájením procesu importu. Dále se smlouvy naimportují, poté je volána metoda ImportContract, aby umožnila úpravu smluv importovaných z metadat. Nakonec se volá metoda, ImportEndpoint která povolí úpravu importovaných koncových bodů.

Další informace naleznete v tématu Postupy: Import vlastního WSDL.

Import vlastních zásadních tvrzení

Typ WsdlImporter a nástroj ServiceModel Metadata Utility (Svcutil.exe) automaticky zpracovávají různé typy zásadních tvrzení ve výrazech politiky připojených k dokumentům WSDL. Tyto nástroje shromažďují, normalizují a slučují výrazy zásad připojené k vazbám WSDL a portům WSDL.

Chcete-li přidat podporu pro import vlastních kontrolních výrazů zásad, implementujte rozhraní IPolicyImportExtension a poté přidejte svou implementaci do vlastnosti PolicyImportExtensions. MetadataImporter může také načíst implementace rozhraní registrovaných v konfiguračním souboru vaší aplikace. Všimněte si, že ve výchozím nastavení je registrováno několik dovozců zásad a pořadí registrovaných dovozců zásad je významné.

Systém metadat opakovaně volá metodu IPolicyImportExtension.ImportPolicy pro všechna zaregistrovaná rozšíření importu zásad pro každou kombinaci alternativ zásad připojených ke zprávě, operaci a tématům zásad koncových bodů. Při importu portu WSDL se zásady, které jsou připojené k portu, a odpovídající vazby WSDL sloučí před voláním rozšíření pro importování zásad. Alternativy zásad jsou zpřístupněny prostřednictvím PolicyConversionContext jako PolicyAssertionCollection objekty. Každé PolicyAssertionCollection je kolekce výrazů zásad reprezentovaných XmlElement objekty.

Vlastnosti Contract a BindingElements na objektu PolicyConversionContext zpřístupňují objekty ContractDescription a BindingElement, které byly importovány z WSDL. Rozšíření zásad zpracovávají výroky zásad tím, že najdou instance konkrétního typu výroku zásady, provedou odpovídající změny na objektech ContractDescription nebo BindingElement a poté odstraní výroky zásad z odpovídající instance PolicyAssertionCollection.

Výrazy wsp:Optional atributů a vnořených zásad nejsou normalizovány, takže rozšíření importu zásad musí zpracovávat tyto konstrukce zásad. Rozšíření importu zásad mohou být také volána vícekrát se stejnými objekty ContractDescription a BindingElement, proto by rozšíření importu zásad měla být vůči tomuto chování robustní.

Důležité

Dovozce může předat neplatná nebo nesprávná metadata. Ujistěte se, že vlastní importéři jsou robustní pro všechny formy XML.

Viz také