Importation de métadonnées personnalisées pour une extension WCF

Dans Windows Communication Foundation (WCF), l’importation de métadonnées est le processus de génération d’une représentation abstraite d’un service ou de ses composants à partir de ses métadonnées. Par exemple, WCF peut importer des instances ServiceEndpoint, des instances Binding ou des instances ContractDescription à partir d’un document WSDL pour un service. Pour importer des métadonnées de service dans WCF, utilisez une implémentation de la classe abstraite System.ServiceModel.Description.MetadataImporter. Les types qui dérivent de la classe MetadataImporter implémentent la prise en charge de l’importation des formats de métadonnées qui tirent parti de la logique d’importation WS-Policy dans WCF.

Les métadonnées personnalisées sont composées d'éléments XML que les importateurs de métadonnées fournis par le système ne peuvent pas importer. En général, cela inclut des extensions WSDL personnalisées et des assertions de stratégie personnalisées.

Cette section décrit comment importer des extensions WSDL et des assertions de stratégie personnalisées. Elle ne traite pas du processus d'importation lui-même. Pour plus d’informations sur l’utilisation des types qui exportent et importent des métadonnées, que celles-ci soient personnalisées ou prises en charge par le système, consultez Exportation et importation de métadonnées.

Vue d’ensemble

Le type System.ServiceModel.Description.WsdlImporter est l’implémentation de la classe abstraite MetadataImporter incluse dans WCF. Le type WsdlImporter importe des métadonnées WSDL avec les stratégies attachées fournies dans un objet System.ServiceModel.Description.MetadataSet. Les assertions de stratégie et les extensions WSDL que les importateurs par défaut ne reconnaissent pas sont passées aux stratégies personnalisées inscrites et aux importateurs WSDL à des fins d'importation. En général, les importateurs sont implémentés pour prendre en charge les éléments de liaison définis par l'utilisateur ou pour modifier le contrat importé.

Cette section décrit :

  1. Comment implémenter et utiliser l'interface System.ServiceModel.Description.IWsdlImportExtension, qui expose les données WSDL aux importateurs personnalisés avant la génération des descriptions et la génération du code. Vous pouvez utiliser cette interface pour examiner ou modifier les types de description et la compilation de code effectuée à l'aide d'un ensemble donné de métadonnées.

  2. Comment implémenter et utiliser l'interface System.ServiceModel.Description.IPolicyImportExtension, qui expose des assertions de stratégie aux importateurs avant la génération d'objets de description. Vous pouvez utiliser cette interface pour examiner ou modifier la liaison ou le contrat selon les stratégies téléchargées.

Pour plus d’informations sur l’exportation de WSDL et d’assertions de stratégies personnalisés, consultez Exportation de métadonnées personnalisées pour une extension WCF.

Importation d’extensions WSDL personnalisées

Pour ajouter la prise en charge de l’importation d’extensions WSDL, implémentez l’interface IWsdlImportExtension, puis ajoutez votre implémentation à la propriété WsdlImportExtensions. Le WsdlImporter peut également charger des implémentations de l'interface IWsdlImportExtension inscrite dans votre fichier de configuration d'application. Notez que plusieurs importateurs WSDL sont inscrits par défaut et que l'ordre des importateurs WSDL inscrits est significatif.

Lorsque l'importateur WSDL personnalisé est chargé et utilisé par le WsdlImporter, la méthode BeforeImport est d'abord appelée afin de permettre la modification des métadonnées avant l'importation. Les contrats sont ensuite importés, après quoi la méthode ImportContract est appelée afin de permettre la modification des contrats importés à partir des métadonnées. Pour finir, la méthode ImportEndpoint est appelée afin de permettre la modification des points de terminaison importés.

Pour plus d’informations, consultez Guide pratique pour importer un WSDL personnalisé.

Importation d'assertions de stratégie personnalisées

Le type WsdlImporter et l’outil Service Model Metadata Utility Tool (Svcutil.exe) gèrent automatiquement le traitement de divers types d’assertion de stratégie dans les expressions de stratégie jointes aux documents WSDL. Ces outils recueillent, normalisent et fusionnent les expressions de stratégie jointes aux liaisons WSDL et aux ports WSDL.

Pour ajouter la prise en charge de l'importation d'assertions de stratégie personnalisées, implémentez l'interface IPolicyImportExtension, puis ajoutez votre implémentation à la propriété PolicyImportExtensions. Le MetadataImporter peut également charger des implémentations de l'interface IPolicyImportExtension inscrite dans votre fichier de configuration d'application. Notez que plusieurs importateurs de stratégies sont inscrits par défaut et que l'ordre des importateurs de stratégies inscrits est significatif.

Le système de métadonnées appelle à plusieurs reprises la méthode IPolicyImportExtension.ImportPolicy sur toutes les extensions d’importation de stratégie inscrites pour chaque combinaison d’alternatives de stratégie jointe aux objets de stratégie de message, d’opération et de point de terminaison. Lors de l'importation d'un port WSDL, les stratégies jointes au port et à la liaison WSDL correspondante sont fusionnées avant l'appel des extensions d'importation de stratégie. Les alternatives de stratégie sont rendues accessibles par le biais d'un PolicyConversionContext en tant qu'objets PolicyAssertionCollection. Chaque PolicyAssertionCollection est une collection d’assertions de stratégie représentés par des objets XmlElement.

Les propriétés Contract et BindingElements sur l'objet PolicyConversionContext exposent les objets ContractDescription et BindingElement importés à partir du WSDL. Les extensions d’importation de stratégie traitent les assertions de stratégie en recherchant les instances d’un type d’assertion de stratégie particulier, en apportant les modifications correspondantes aux objets ContractDescription ou BindingElement et en supprimant ensuite les assertions de stratégie de l’instance PolicyAssertionCollection correspondante.

L'attribut wsp:Optional et les expressions de stratégie imbriquées n'étant pas normalisés, les extensions d'importation de stratégie doivent gérer ces constructions de stratégie. De plus, les extensions d'importation de stratégie pouvant être appelées plusieurs fois avec les mêmes objets ContractDescription et BindingElement, les extensions d'importation de stratégie doivent être fiables envers ce comportement.

Important

Des métadonnées non valides ou incorrectes peuvent être passées à l'importateur. Assurez-vous que les importateurs personnalisés sont fiables à toutes les formes de XML.

Voir aussi