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 pro import formátů metadat, které využívají logiku importu WS-Policy ve WCF.

Vlastní metadata se skládají z elementů XML, které importují systémová importovaná metadata. Obvykle to zahrnuje vlastní rozšíření WSDL a kontrolní výrazy vlastních zásad.

Tato část popisuje, jak importovat vlastní rozšíření WSDL a kontrolní 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 . Kontrolní výrazy zásad a rozšíření WSDL, které výchozí importéři nerozpoznávají, se předávají všem registrovaným vlastním zásadám a importům WSDL pro import. 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é zveřejňuje kontrolní výrazy zásad dovozcem 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. Může WsdlImporter také načíst implementace rozhraní registrovaného v konfiguračním IWsdlImportExtension 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í WsdlImportervlastního importu WSDL , první BeforeImport metoda je volána k povolení úpravy metadat před importem procesu. Dále se kontrakty naimportují, po kterých ImportContract je volána metoda, aby bylo možné upravit kontrakty importované 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 kontrolních výrazů vlastních zásad

Typ WsdlImporter a nástroj ServiceModel Metadata Utility (Svcutil.exe) automaticky zpracovávají zpracování různých typů kontrolních výrazů zásad ve výrazech zásad 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.

Pokud chcete přidat podporu importu vlastních kontrolních výrazů zásad, implementujte IPolicyImportExtension rozhraní a pak do vlastnosti přidejte implementaci PolicyImportExtensions . Může MetadataImporter také načíst implementace rozhraní registrovaného v konfiguračním IPolicyImportExtension 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 připojené k portu a odpovídající vazbu WSDL sloučí před voláním do rozšíření importu zásad. Alternativy zásad jsou zpřístupněny prostřednictvím PolicyConversionContext objektů.PolicyAssertionCollection Každá z nich PolicyAssertionCollection je kolekce kontrolních výrazů zásad reprezentovaných XmlElement objekty.

Objekt Contract a BindingElements vlastnosti PolicyConversionContext zpřístupňují ContractDescription objekty a BindingElement objekty, které byly importovány z WSDL. Rozšíření zásad importují kontrolní výrazy zásad vyhledáním instancí konkrétního typu kontrolního výrazu zásady, provedením odpovídajících změn ContractDescription nebo BindingElement objektů a následným odebráním kontrolních výrazů zásad z odpovídající PolicyAssertionCollection instance.

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 se také můžou volat vícekrát se stejnými ContractDescription objekty a BindingElement rozšíření importu zásad by proto měla být pro toto 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é