Partager via


Comment : importer des assertions de stratégie personnalisées

Les assertions de stratégie décrivent les fonctions et spécifications d'un point de terminaison de service. Les applications clientes peuvent utiliser des assertions de stratégie dans les métadonnées de service pour configurer la liaison cliente ou personnaliser le contrat de service d'un point de terminaison de service.

Les assertions de stratégie personnalisées sont importées en implémentant l'interface System.ServiceModel.Description.IPolicyImportExtension et en passant cet objet au système de métadonnées ou en enregistrant le type d'implémentation dans le fichier de configuration de votre application. Les implémentations de l'interface IPolicyImportExtension doivent fournir un constructeur par défaut.

Pour importer des assertions de stratégie personnalisées

  1. Implémentez l'interface System.ServiceModel.Description.IPolicyImportExtension sur une classe. Consultez les procédures suivantes.

  2. Insérez l'importateur de stratégie personnalisé selon l'une des méthodes suivantes :

  3. Utilisation d'un fichier de configuration. Consultez les procédures suivantes.

  4. Utilisation d'un fichier de configuration à l'aide de ServiceModel Metadata Utility Tool (Svcutil.exe). Consultez les procédures suivantes.

  5. Insertion par programme de l'importateur de stratégie. Consultez les procédures suivantes.

Pour implémenter l'interface System.ServiceModel.Description.IPolicyImportExtension sur une classe

  1. Dans la méthode System.ServiceModel.Description.IPolicyImportExtension.ImportPolicy(System.ServiceModel.Description.MetadataImporter,System.ServiceModel.Description.PolicyConversionContext), recherchez, pour chaque sujet de stratégie qui vous intéresse, les assertions de stratégie que vous souhaitez importer en appelant la méthode appropriée (selon sur la portée de l'assertion de votre choix) sur l'objet System.ServiceModel.Description.PolicyConversionContext passé à la méthode. L'exemple de code suivant indique comment utiliser la méthode System.ServiceModel.Description.PolicyAssertionCollection.Remove(System.String,System.String) pour localiser l'assertion de stratégie personnalisée et la supprimer de la collection en une étape. Si vous utilisez la méthode de suppression pour localiser et supprimer l'assertion, l'étape 4 n'est pas nécessaire.

  2. Traitez les assertions de stratégie. Notez que le système de stratégie ne normalise pas les stratégies imbriquées et wsp:optional. Vous devez traiter ces constructions dans votre implémentation d'extension d'importation de stratégie.

  3. Exécutez la personnalisation sur la liaison ou le contrat qui prend en charge la fonction ou la spécification spécifiée par l'assertion de stratégie. En général, les assertions indiquent qu'une liaison requiert une configuration particulière ou un élément de liaison spécifique. Apportez ces modifications en accédant à la propriété System.ServiceModel.Description.PolicyConversionContext.BindingElements. D'autres assertions requièrent la modification du contrat. Vous pouvez accéder et modifier le contrat à l'aide de la propriété System.ServiceModel.Description.PolicyConversionContext.Contract. Notez que votre importateur de stratégie peut être appelé plusieurs fois pour la même liaison et le même contrat, mais pour des alternatives de stratégie différentes en cas d'échec de l'importation d'une alternative de stratégie. Votre code doit être résilient à ce comportement.

  4. Supprimez l'assertion de stratégie personnalisée de la collection d'assertions. Si vous ne supprimez pas l'assertion, Windows Communication Foundation (WCF) suppose que l'importation de stratégie a échoué et n'importe pas la liaison associée. Si vous avez utilisé la méthode System.ServiceModel.Description.PolicyAssertionCollection.Remove(System.String,System.String) pour localiser l'assertion de stratégie personnalisée et la supprimer de la collection en une étape, cette étape n'est pas nécessaire.

Pour insérer l'importateur de stratégie personnalisé dans le système de métadonnées à l'aide d'un fichier de configuration

  1. Ajoutez le type d'importateur à l'élément <extensions> à l'intérieur de l'élément <policyImporters> dans le fichier de configuration client.

  2. Dans l'application cliente, utilisez System.ServiceModel.Description.MetadataResolver ou System.ServiceModel.Description.WsdlImporter pour résoudre les métadonnées, l'importateur étant appelé automatiquement.

Pour insérer l'importateur de stratégie personnalisé dans le système de métadonnées à l'aide de Svcutil.exe

  1. Ajoutez le type d'importateur à l'élément <extensions> à l'intérieur de l'élément <policyImporters> dans le fichier configuration Svcutil.exe.config. Vous pouvez également pointer Svcutil.exe pour charger les types d'importateur de stratégie enregistrés dans un autre fichier de configuration à l'aide de l'option /svcutilConfig.

  2. Utilisez ServiceModel Metadata Utility Tool (Svcutil.exe) pour importer les métadonnées, l'importateur étant appelé automatiquement.

Pour insérer par programme l'importateur de stratégie personnalisé dans le système de métadonnées

  1. Ajoutez l'importateur à la propriété System.ServiceModel.Description.MetadataImporter.PolicyImportExtensions (par exemple, si vous utilisez System.ServiceModel.Description.WsdlImporter) avant d'importer les métadonnées.

Voir aussi

Référence

System.ServiceModel.Description.MetadataResolver
System.ServiceModel.Description.WsdlImporter
System.ServiceModel.Description.MetadataResolver

Autres ressources

Extension du système de métadonnées