Compartir a través de


Cómo: Importar aserciones de directivas personalizadas

Las aserciones de directivas describen las funciones y requisitos de un extremo de servicio. Las aplicaciones cliente pueden utilizar aserciones de directivas en metadatos del servicio para configurar el enlace de cliente o para personalizar el contrato de servicio de un extremo de servicio.

Las aserciones de directiva personalizadas se importan implementando la interfaz System.ServiceModel.Description.IPolicyImportExtension y pasando ese objeto al sistema de los metadatos o registrando el tipo de implementación en su archivo de configuración de la aplicación. Las implementaciones de la interfaz IPolicyImportExtension deben proporcionar un constructor predeterminado.

Para importar aserciones de directivas personalizadas

  1. Implemente la interfaz System.ServiceModel.Description.IPolicyImportExtension en una clase. Consulte los procedimientos siguientes.

  2. Insertar el importador de directivas personalizadas mediante:

  3. El uso de un archivo de configuración Consulte los procedimientos siguientes.

  4. Uso de un archivo de configuración con ServiceModel Metadata Utility Tool (Svcutil.exe). Consulte los procedimientos siguientes.

  5. Insertar mediante programación el importador de la directiva. Consulte los procedimientos siguientes.

Para implementar la interfaz System.ServiceModel.Description.IPolicyImportExtension en cualquier clase

  1. En el método System.ServiceModel.Description.IPolicyImportExtension.ImportPolicy(System.ServiceModel.Description.MetadataImporter,System.ServiceModel.Description.PolicyConversionContext), para cada asunto de la directiva en la que esté interesado, busque las aserciones de directiva que desee importar llamando al método adecuado (dependiendo del ámbito de la aserción que desee) en el objeto System.ServiceModel.Description.PolicyConversionContext pasado al método. El ejemplo de código siguiente muestra cómo utilizar el método System.ServiceModel.Description.PolicyAssertionCollection.Remove(System.String,System.String) para ubicar la aserción de directiva personalizada y quitarla de la colección en un paso. Si utiliza el método de eliminación para buscar y quitar la aserción, no tiene que realizar el paso 4.

  2. Procese las aserciones de directiva. Tenga en cuenta que el sistema de la directiva no normaliza directivas anidadas y wsp:optional. Debe procesar estas construcciones en su implementación de extensión de importación de directivas.

  3. Realice la personalización para el enlace o contrato que admite la función o el requisito especificó por la aserción de directiva. Normalmente las aserciones indican que un enlace requiere una configuración determinada o un elemento de enlace concreto. Realice estas modificaciones obteniendo acceso a la propiedad System.ServiceModel.Description.PolicyConversionContext.BindingElements. Otras aserciones requieren que modifique el contrato. Puede obtener acceso y modificar el contrato mediante la propiedad System.ServiceModel.Description.PolicyConversionContext.Contract. Observe que su importador de directivas se puede llamar varias veces para el mismo enlace y contrato, pero para alternativas de directivas diferentes si no se importa correctamente una alternativa de directivas. Su código debería ser resistente a este comportamiento.

  4. Elimine la aserción de directiva personalizada de la colección de aserciones. Si no elimina la aserción, Windows Communication Foundation (WCF) supone que la importación de la directiva no se realizó correctamente y no importa el enlace asociado. Si usó el método System.ServiceModel.Description.PolicyAssertionCollection.Remove(System.String,System.String) para ubicar la aserción de directivas personalizadas y eliminarla de la colección en un paso no tiene que realizar este paso.

Para insertar el importador de directivas personalizadas en el sistema de metadatos utilizando un archivo de configuración

  1. Agregue el tipo de importador al elemento <extensions> dentro del elemento <policyImporters> en el archivo de configuración del cliente.

  2. En la aplicación cliente, utilice System.ServiceModel.Description.MetadataResolver o System.ServiceModel.Description.WsdlImporter para resolver los metadatos y se invoca automáticamente el importador.

Para insertar el importador de directivas personalizadas en el sistema de metadatos utilizando Svcutil.exe

  1. Agregue el tipo de importador al elemento <extensions> dentro del <policyImporters> elemento en el archivo de configuración Svcutil.exe.config. También puede señalar Svcutil.exe para cargar tipos de importador de directivas registrados en un archivo de configuración diferente mediante la opción /svcutilConfig.

  2. Utilice ServiceModel Metadata Utility Tool (Svcutil.exe) para importar los metadatos y se invoca el importador automáticamente.

Para insertar mediante programación el importador de directivas personalizadas en el sistema de metadatos

  1. Agregue el importador a la propiedad System.ServiceModel.Description.WsdlImporter(por ejemplo, si está utilizando ) System.ServiceModel.Description.MetadataImporter.PolicyImportExtensions antes de importar los metadatos.

Consulte también

Referencia

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

Otros recursos

Extensión del sistema de metadatos