Importazione di metadati personalizzati per un'estensione WCF
In Windows Communication Foundation (WCF) l'importazione dei metadati consiste nella generazione di una rappresentazione astratta di un servizio o dei relativi componenti a partire dai metadati del servizio. Ad esempio, WCF può importare istanze della classe ServiceEndpoint, della classe Binding o della classe ContractDescription da un documento WSDL di un servizio. Per importare i metadati di un servizio in WCF è necessario utilizzare un'implementazione della classe astratta System.ServiceModel.Description.MetadataImporter. I tipi che derivano dalla classe MetadataImporter implementano il supporto per l'importazione dei formati di metadati che si basano sulla logica di importazione di WS-Policy di WCF.
I metadati personalizzati sono costituiti da elementi XML non importabili mediante le utilità di importazione dei metadati forniti dal sistema. Esempi comuni di metadati personalizzati sono le estensioni WSDL personalizzate e le asserzioni di criteri personalizzate.
Questa sezione descrive come importare le estensioni WSDL e le asserzioni di criteri personalizzate, senza tuttavia tratta il processo di importazione in sé. Per ulteriori informazioni sull'utilizzo dei tipi che esportano e importano metadati, siano essi personalizzati o supportati dal sistema, vedere Esportazione e importazione di metadati.
Cenni preliminari
Il tipo System.ServiceModel.Description.WsdlImporter è un'implementazione della classe astratta MetadataImporter fornita da WCF. Il tipo WsdlImporter importa metadati WSDL insieme ai relativi criteri allegati. Questi elementi vengono quindi raggruppati in un oggetto System.ServiceModel.Description.MetadataSet. Le asserzioni di criteri e le estensioni WSDL non riconosciute dalle unità di importazione predefinite vengono importate tramite una delle unità di importazione personalizzate e registrate di documenti WSDL e di criteri. In genere, le unità di importazione vengono implementate per supportare gli elementi di associazione definiti dall'utente o per modificare il contratto importato.
In questa sezione sono descritti gli argomenti seguenti:
- Implementazione e utilizzo dell'interfaccia System.ServiceModel.Description.IWsdlImportExtension, che espone i dati WSDL alle unità di importazione personalizzate prima di generare descrizioni e codice. Questa interfaccia può essere utilizzata per esaminare o modificare i tipi di descrizione e la compilazione del codice eseguita utilizzando un determinato insieme di metadati.
- Implementazione e utilizzo dell'interfaccia System.ServiceModel.Description.IPolicyImportExtension, che espone le asserzioni di criteri alle unità di importazione prima di generare oggetti descrizione. Questa interfaccia può essere utilizzata per esaminare o modificare l'associazione o il contratto in base ai criteri scaricati.
Per ulteriori informazioni sull'esportazione di elementi WSDL e di asserzioni di criteri personalizzati, vedere Esportazione di metadati personalizzati per un'estensione WCF.
Importazione di estensioni WSDL personalizzate
Per includere il supporto per l'importazione di estensioni WSDL, implementare l'interfaccia IWsdlImportExtension e quindi aggiungere tale implementazione alla proprietà WsdlImportExtensions. È inoltre possibile utilizzare il tipo WsdlImporter per caricare implementazioni dell'interfaccia IWsdlImportExtension registrate nel file di configurazione dell'applicazione. Si noti che alcune unità di importazione WSDL sono registrate per impostazione predefinita e che l'ordine delle unità di importazione WSDL registrate è rilevante.
Quando l'unità di importazione WSDL personalizzata viene caricata e utilizzata dal tipo WsdlImporter, prima di eseguire il processo di importazione il sistema chiama il metodo BeforeImport per consentire la modifica dei metadati. Quindi, dopo aver importato i contratti, il sistema chiama il metodo ImportContract per consentire la modifica dei contratti importati dai metadati. Infine, il sistema chiama il metodo ImportEndpoint per consentire la modifica degli endpoint importati.
Per ulteriori informazioni, vedere Procedura: importare informazioni WSDL personalizzate.
Importazione di asserzioni di criteri personalizzati
Il tipo WsdlImporter e lo ServiceModel Metadata Utility Tool (Svcutil.exe) gestiscono automaticamente l'elaborazione di vari tipi di asserzione di criteri contenuti nelle espressioni di criteri allegate ai documenti WSDL. Questi strumenti raccolgono, normalizzano e uniscono le espressioni di criteri allegate alle associazioni e alle porte WSDL.
Per includere il supporto per l'importazione di asserzioni di criteri personalizzate, implementare l'interfaccia IPolicyImportExtension e quindi aggiungere tale implementazione alla proprietà PolicyImportExtensions. È inoltre possibile utilizzare il tipo MetadataImporter per caricare implementazioni dell'interfaccia IPolicyImportExtension registrate nel file di configurazione dell'applicazione. Si noti che alcune unità di importazione dei criteri sono registrate per impostazione predefinita e che l'ordine delle unità di importazione dei criteri registrate è rilevante.
Il sistema dei metadati chiama più volte il metodo System.ServiceModel.Description.IPolicyImportExtension.ImportPolicy(System.ServiceModel.Description.MetadataImporter,System.ServiceModel.Description.PolicyConversionContext) in tutte le estensioni di importazione criteri registrate per ogni combinazione di alternative criteri allegate ai soggetti di criterio di messaggio, operazione ed endpoint. Quando si importa una porta WSDL, i criteri allegati alla porta e all'associazione WSDL corrispondente vengono uniti prima di chiamare le estensioni di importazione criteri. Le alternative criteri sono rese disponibili sottoforma di oggetti PolicyAssertionCollection tramite un contesto PolicyConversionContext. Ogni oggetto PolicyAssertionCollection è un insieme di asserzioni di criteri rappresentato dagli oggetti XmlElement.
Le proprietà Contract e BindingElements dell'oggetto PolicyConversionContext espongono gli oggetti ContractDescription e BindingElement importati dal documento WSDL. Le estensioni di importazione criteri elaborano le asserzioni di criteri individuando le istanze di un determinato tipo di asserzione di criteri, apportando le modifiche corrispondenti agli oggetti ContractDescription o BindingElement e quindi rimuovendo le asserzioni di criteri dall'istanza PolicyAssertionCollection corrispondente.
Poiché l'attributo wsp:Optional e le espressioni di criteri nidificate non sono normalizzate, le estensioni di importazione criteri devono gestire questi costrutti di criterio. Inoltre, poiché le estensioni di importazione criteri possono essere chiamate più volte con gli stessi oggetti ContractDescription e BindingElement, le estensioni di importazione criteri devono essere in grado di gestire questo tipo di comportamento.
Nota
È possibile che all'unità di importazione vengano passati metadati non validi o inappropriati. È pertanto necessario garantire che le unità di importazione personalizzate siano in grado di gestire qualsiasi formato XML.
Vedere anche
Attività
Procedura: importare informazioni WSDL personalizzate
Procedura: importare asserzioni di criteri personalizzati
Procedura: scrivere un'estensione per ServiceContractGenerator