Compartir a través de


Importación de metadatos personalizados para una extensión WCF

En Windows Communication Foundation (WCF), la importación de metadatos es el proceso de generar una representación abstracta de un servicio o sus partes de componente a partir de sus metadatos. Por ejemplo, WCF puede importar instancias de ServiceEndpoint, Binding o ContractDescription de un documento WSDL para un servicio. Para importar metadatos de servicio en WCF, use una implementación de la System.ServiceModel.Description.MetadataImporter clase abstracta. Los tipos que derivan de la MetadataImporter clase implementan compatibilidad con la importación de formatos de metadatos que aprovechan la lógica de importación de WS-Policy en WCF.

Los metadatos personalizados constan de elementos XML que los importadores de metadatos proporcionados por el sistema no pueden importar. Normalmente, esto incluye extensiones WSDL personalizadas y aserciones de directiva personalizadas.

En esta sección se describe cómo importar extensiones de WSDL personalizadas y aserciones de directiva. No se centra en el propio proceso de importación. Para obtener más información sobre cómo usar los tipos que exportan e importan metadatos independientemente de si los metadatos son personalizados o compatibles con el sistema, consulte Exportación e importación de metadatos.

Información general

El System.ServiceModel.Description.WsdlImporter tipo es la implementación de la MetadataImporter clase abstracta incluida con WCF. El WsdlImporter tipo importa metadatos de WSDL con directivas adjuntas que se agrupan en un System.ServiceModel.Description.MetadataSet objeto . Las aserciones de directivas y las extensiones WSDL que los importadores predeterminados no reconocen se pasan a cualquier directiva personalizada registrada e importadores del WSDL para su importación. Normalmente, los importadores se implementan para admitir elementos de enlace definidos por el usuario o para modificar el contrato importado.

En esta sección se describe:

  1. Cómo implementar y usar la System.ServiceModel.Description.IWsdlImportExtension interfaz , que expone los datos WSDL a importadores personalizados antes de la generación de descripciones y la generación de código. Puede usar esta interfaz para examinar o modificar los tipos de descripción y la compilación de código realizadas mediante un conjunto determinado de metadatos.

  2. Cómo implementar y usar la System.ServiceModel.Description.IPolicyImportExtension interfaz , que expone las aserciones de directiva a los importadores antes de la generación de objetos de descripción. Puede usar esta interfaz para examinar o modificar la vinculación o el contrato en función de las políticas descargadas.

Para obtener más información sobre cómo exportar aserciones personalizadas de WSDL y directivas, vea Exportar metadatos personalizados para una extensión WCF.

Importación de extensiones WSDL personalizadas

Para agregar soporte para la importación de extensiones WSDL, implemente la interfaz IWsdlImportExtension y luego agregue su implementación a la propiedad WsdlImportExtensions. El WsdlImporter también puede cargar implementaciones de la interfaz IWsdlImportExtension registradas en el archivo de configuración de su aplicación. Tenga en cuenta que un número de importadores de WSDL se registran de forma predeterminada y el orden de los importadores WSDL registrados es significativo.

Cuando el importador de WSDL personalizado se carga y es utilizado por WsdlImporter, primero se llama al método BeforeImport para habilitar la modificación de los metadatos antes del proceso de importación. A continuación, los contratos se importan después de los cuales se llama al ImportContract método para habilitar la modificación de los contratos importados de los metadatos. Finalmente, se llama al método ImportEndpoint para permitir la modificación de los puntos de conexión importados.

Para obtener más información, vea Cómo: Importar WSDL personalizado.

Importación de afirmaciones de política personalizadas

El tipo WsdlImporter y la Herramienta de Utilidad de Metadatos ServiceModel (Svcutil.exe) controlan automáticamente el procesamiento de una variedad de tipos de aserciones de política en expresiones de política adjuntas a documentos WSDL. Estas herramientas recopilan, normalizan y combinan expresiones de directiva asociadas a enlaces WSDL y puertos WSDL.

Para agregar compatibilidad con la importación de aserciones de directivas personalizadas, implemente la interfaz IPolicyImportExtension y luego añada su implementación a la propiedad PolicyImportExtensions. El MetadataImporter también puede cargar implementaciones de la interfaz IPolicyImportExtension registradas en el archivo de configuración de su aplicación. Observe que se registran varios importadores de directivas de forma predeterminada y el orden de los importadores de directivas registradas es significativo.

El sistema de metadatos llama repetidamente al método IPolicyImportExtension.ImportPolicy en todas las extensiones de importación de directivas registradas para cada combinación de alternativas de directivas adjuntas al mensaje, operación y asuntos de directivas de puntos de conexión. Al importar un puerto WSDL, las directivas asociadas al puerto y al enlace WSDL correspondiente se combinan antes de llamar a las extensiones de importación de directivas. Las alternativas de directivas se ponen a disposición a través de PolicyConversionContext como objetos PolicyAssertionCollection. Cada PolicyAssertionCollection es una colección de aserciones de directiva representadas por XmlElement objetos .

Las propiedades Contract y BindingElements en el objeto PolicyConversionContext exponen los objetos ContractDescription y BindingElement que se importaron desde el WSDL. Las extensiones de importación de directivas procesan las aserciones de directiva mediante la búsqueda de instancias de un tipo de aserción de directiva determinado, realizando los cambios correspondientes en los ContractDescription objetos o BindingElement y, a continuación, quitando las aserciones de directiva de la instancia correspondiente PolicyAssertionCollection .

El atributo wsp:Optional y las expresiones de política anidadas no están normalizadas, por lo que las extensiones de importación de políticas deben gestionar estas construcciones de política. Además, las extensiones de importación de directivas se pueden llamar varias veces con los mismos objetos ContractDescription y BindingElement, por lo que deben ser robustas ante este comportamiento.

Importante

Los metadatos no válidos o incorrectos se pueden pasar al importador. Asegúrese de que los importadores personalizados son sólidos para todas las formas de XML.

Consulte también