Dela via


Importera anpassade metadata för ett WCF-tillägg

I Windows Communication Foundation (WCF) är metadataimport processen för att generera en abstrakt representation av en tjänst eller dess komponentdelar från dess metadata. WCF kan till exempel importera ServiceEndpoint instanser, Binding instanser eller ContractDescription instanser från ett WSDL-dokument för en tjänst. Om du vill importera tjänstmetadata i WCF använder du en implementering av den System.ServiceModel.Description.MetadataImporter abstrakta klassen. Typer som härleds från MetadataImporter klassen implementerar stöd för import av metadataformat som drar nytta av WS-policyns importlogik i WCF.

Anpassade metadata består av XML-element som de systembaserade metadataimportörerna inte kan importera. Detta omfattar vanligtvis anpassade WSDL-tillägg och anpassade principkontroller.

I det här avsnittet beskrivs hur du importerar anpassade WSDL-tillägg och principkontroller. Den fokuserar inte på själva importprocessen. Mer information om hur du använder de typer som exporterar och importerar metadata oavsett om metadata är anpassade eller systemstödda finns i Exportera och importera metadata.

Översikt

Typen System.ServiceModel.Description.WsdlImporter är implementeringen av den MetadataImporter abstrakta klass som ingår i WCF. Typen WsdlImporter importerar WSDL-metadata med anslutna principer som paketeras i ett System.ServiceModel.Description.MetadataSet objekt. Principkontroller och WSDL-tillägg som standardimportörerna inte känner igen skickas till någon registrerad anpassad princip och WSDL-importörer för import. Vanligtvis implementeras importörer för att stödja användardefinierade bindningselement eller för att ändra det importerade kontraktet.

I det här avsnittet beskrivs:

  1. Hur du implementerar och använder System.ServiceModel.Description.IWsdlImportExtension gränssnittet, som exponerar WSDL-data för anpassade importörer före genereringen av beskrivningar och generering av kod. Du kan använda det här gränssnittet för att undersöka eller ändra de beskrivningstyper och kodkompilering som utförs med hjälp av en viss uppsättning metadata.

  2. Så här implementerar och använder du System.ServiceModel.Description.IPolicyImportExtension gränssnittet, som exponerar principkontroller för importörer innan beskrivningsobjekt skapas. Du kan använda det här gränssnittet för att undersöka eller ändra bindningen eller kontraktet baserat på de nedladdade principerna.

Mer information om hur du exporterar anpassade WSDL- och principkontroller finns i Exportera anpassade metadata för ett WCF-tillägg.

Importera anpassade WSDL-tillägg

Om du vill lägga till stöd för import av WSDL-tillägg implementerar IWsdlImportExtension du gränssnittet och lägger sedan till implementeringen i WsdlImportExtensions egenskapen. WsdlImporter Kan också läsa in implementeringar av gränssnittet IWsdlImportExtension som är registrerat i programkonfigurationsfilen. Observera att ett antal WSDL-importörer registreras som standard och att ordningen på de registrerade WSDL-importörerna är betydande.

När den anpassade WSDL-importören läses in och används av WsdlImporteranropas BeforeImport först metoden för att aktivera ändring av metadata före importprocessen. Därefter importeras kontrakten ImportContract varefter metoden anropas för att aktivera ändringen av kontrakten som importeras från metadata. Slutligen anropas ImportEndpoint metoden för att aktivera ändringen av de importerade slutpunkterna.

Mer information finns i Så här: Importera anpassad WSDL.

Importera anpassade principkontroller

Typen WsdlImporter och ServiceModel-verktyget för metadataverktyg (Svcutil.exe) hanterar automatiskt bearbetningen av en mängd olika principkontrolltyper i principuttryck som är kopplade till WSDL-dokument. Dessa verktyg samlar in, normaliserar och sammanfogar principuttryck som är kopplade till WSDL-bindningar och WSDL-portar.

Om du vill lägga till stöd för import av anpassade principkontroller implementerar IPolicyImportExtension du gränssnittet och lägger sedan till implementeringen i PolicyImportExtensions egenskapen. MetadataImporter Kan också läsa in implementeringar av gränssnittet IPolicyImportExtension som är registrerat i programkonfigurationsfilen. Observera att ett antal principimportörer registreras som standard och att ordningen på de registrerade principimportörerna är betydande.

Metadatasystemet anropar IPolicyImportExtension.ImportPolicy upprepade gånger metoden för alla registrerade principimporttillägg för varje kombination av principalternativ som är kopplade till meddelande-, åtgärds- och slutpunktsprincipämnena. När du importerar en WSDL-port sammanfogas principer som är kopplade till porten och till motsvarande WSDL-bindning innan de anropas till principimporttilläggen. Principalternativen görs tillgängliga via ett som-objekt PolicyConversionContextPolicyAssertionCollection . Var och PolicyAssertionCollection en är en samling principkontroller som representeras av XmlElement objekt.

Egenskaperna Contract och BindingElementsPolicyConversionContext objektet exponerar objekten ContractDescription och BindingElement som importerades från WSDL. Principimporttillägg bearbetar principkontroller genom att hitta instanser av en viss principkontrolltyp, göra motsvarande ändringar i objekten ContractDescription eller BindingElement och sedan ta bort principkontrollerna från motsvarande PolicyAssertionCollection instans.

Attributet wsp:Optional och kapslade principuttryck normaliseras inte, så tillägg för principimport måste hantera dessa principkonstruktioner. Dessutom kan tillägg för principimport anropas flera gånger med samma ContractDescription objekt och BindingElement objekt, så tilläggen för principimport bör vara robusta för det här beteendet.

Viktigt!

Ogiltiga eller felaktiga metadata kan skickas till importören. Se till att anpassade importörer är robusta för alla former av XML.

Se även