Condividi tramite


Importazione di metadati personalizzati per un'estensione WCF

In Windows Communication Foundation (WCF), l'importazione dei metadati è il processo di generazione di una rappresentazione astratta di un servizio o delle relative parti del componente dai relativi metadati. Wcf, ad esempio, può importare ServiceEndpoint istanze, Binding istanze o ContractDescription istanze da un documento WSDL per un servizio. Per importare i metadati del servizio in WCF, usare un'implementazione della System.ServiceModel.Description.MetadataImporter classe astratta. I tipi derivati dalla classe MetadataImporter implementano supporto per l'importazione di formati di metadati che fanno uso della logica di importazione WS-Policy in WCF.

I metadati personalizzati sono costituiti da elementi XML che non possono essere importati dall'utilità di importazione dei metadati fornita dal sistema. In genere, sono incluse estensioni WSDL personalizzate e asserzioni di criteri personalizzate.

Questa sezione descrive come importare estensioni WSDL personalizzate e asserzioni di criteri. Non si concentra sul processo di importazione stesso. Per altre informazioni su come usare i tipi che esportano e importano metadati indipendentemente dal fatto che i metadati siano personalizzati o supportati dal sistema, vedere Esportazione e importazione di metadati.

Informazioni generali

Il System.ServiceModel.Description.WsdlImporter tipo è l'implementazione della MetadataImporter classe astratta inclusa in WCF. Il WsdlImporter tipo importa i metadati WSDL con criteri associati raggruppati in un System.ServiceModel.Description.MetadataSet oggetto . Le asserzioni di criteri e le estensioni WSDL che gli importatori predefiniti non riconoscono vengono passate a qualsiasi importatore personalizzato registrato per l'importazione. In genere, gli importers vengono implementati per supportare gli elementi di associazione definiti dall'utente o per modificare il contratto importato.

Questa sezione descrive:

  1. Come implementare e usare l'interfaccia System.ServiceModel.Description.IWsdlImportExtension , che espone i dati WSDL a unità di importazione personalizzate prima della generazione di descrizioni e della generazione di codice. È possibile usare questa interfaccia per esaminare o modificare i tipi di descrizione e la compilazione del codice eseguiti usando un determinato set di metadati.

  2. Come implementare e usare l'interfaccia System.ServiceModel.Description.IPolicyImportExtension, che espone le asserzioni delle politiche agli importatori prima della generazione degli oggetti di descrizione. Si può utilizzare questa interfaccia per esaminare o modificare il vincolo o il contratto in base alle politiche scaricate.

Per altre informazioni sull'esportazione di asserzioni WSDL e criteri personalizzate, vedere Esportazione di metadati personalizzati per un'estensione WCF.

Importazione di estensioni WSDL personalizzate

Per aggiungere il supporto per l'importazione di estensioni WSDL, implementare l'interfaccia IWsdlImportExtension e quindi aggiungere la vostra implementazione alla proprietà WsdlImportExtensions. WsdlImporter può anche caricare le implementazioni dell'interfaccia IWsdlImportExtension registrata nel file di configurazione dell'applicazione. Si noti che una serie di importazioni WSDL vengono registrate per impostazione predefinita e l'ordine degli import WSDL registrati è significativo.

Quando l'utilità di importazione WSDL personalizzata viene caricata e utilizzata da WsdlImporter, si procede prima chiamando il metodo BeforeImport per abilitare la modifica dei metadati prima del processo di importazione. Successivamente, i contratti vengono importati dopo il quale viene chiamato il ImportContract metodo per abilitare la modifica dei contratti importati dai metadati. Viene infine chiamato il ImportEndpoint metodo per abilitare la modifica degli endpoint importati.

Per altre informazioni, vedere Procedura: Importare WSDL personalizzato.

Importazione di asserzioni di criteri personalizzate

Il WsdlImporter tipo e lo strumento utilità metadati ServiceModel (Svcutil.exe) gestiscono automaticamente l'elaborazione di un'ampia gamma di tipi di asserzioni di criteri nelle espressioni di criteri associate ai documenti WSDL. Questi strumenti raccolgono, normalizzano e uniscono le espressioni dei criteri associate alle associazioni WSDL e alle porte WSDL.

Per aggiungere il supporto per l'importazione di asserzioni di criteri personalizzate, implementare l'interfaccia IPolicyImportExtension e quindi aggiungere l'implementazione alla proprietà PolicyImportExtensions. MetadataImporter può anche caricare le implementazioni dell'interfaccia IPolicyImportExtension registrata nel file di configurazione dell'applicazione. Nota che un certo numero di importatori di criteri viene registrato per impostazione predefinita e l'ordine dei criteri importati è significativo.

Il sistema di metadati chiama ripetutamente il IPolicyImportExtension.ImportPolicy metodo su tutte le estensioni di importazione di criteri registrati per ogni combinazione di alternative di criteri associate ai soggetti dei criteri del messaggio, dell'operazione e dell'endpoint. Quando si importa una porta WSDL, i criteri associati alla porta e all'associazione WSDL corrispondente vengono uniti prima di chiamare le estensioni di importazione dei criteri. Le alternative politiche vengono rese disponibili come oggetti PolicyConversionContext e PolicyAssertionCollection. Ogni PolicyAssertionCollection è una raccolta di asserzioni di criteri rappresentate da XmlElement oggetti .

Le Contract proprietà e BindingElements nell'oggetto PolicyConversionContext espongono gli ContractDescription oggetti e BindingElement importati da WSDL. Le estensioni di importazione dei criteri elaborano le asserzioni di criteri trovando istanze di un particolare tipo di asserzione di criteri, apportando le modifiche corrispondenti agli ContractDescription oggetti o BindingElement e quindi rimuovendo le asserzioni di criteri dall'istanza corrispondente PolicyAssertionCollection .

L'attributo wsp:Optional e le espressioni di criteri annidate non sono normalizzate, pertanto le estensioni di importazione dei criteri devono gestire questi costrutti di criteri. Inoltre, le estensioni di importazione dei criteri possono essere chiamate più volte con gli stessi ContractDescription oggetti e BindingElement , pertanto le estensioni di importazione dei criteri devono essere affidabili per questo comportamento.

Importante

I metadati non validi o non appropriati possono essere passati all'importatore. Assicurarsi che le unità di importazione personalizzate siano affidabili per tutte le forme di XML.

Vedere anche