Exportación e importación de metadatos
En Windows Communication Foundation (WCF), la exportación de metadatos es el proceso que consiste en describir puntos de conexión de servicio y proyectarlos en una representación paralela y estandarizada que pueden usar los clientes para que entiendan cómo se usa el servicio. Importar los metadatos de servicio es el proceso de generar instancias de ServiceEndpoint o partes de los metadatos de servicio.
Exportación de metadatos
Para exportar metadatos desde instancias de System.ServiceModel.Description.ServiceEndpoint, utilice una implementación de la clase abstracta MetadataExporter. El tipo WsdlExporter es la implementación de la clase abstracta MetadataExporter que se incluye en WCF.
El tipo System.ServiceModel.Description.WsdlExporter genera los metadatos del Lenguaje de descripción de servicios Web (WSDL) con expresiones de directiva adjuntas encapsuladas en una instancia de MetadataSet. Puede utilizar una instancia System.ServiceModel.Description.WsdlExporter para exportar de manera iterativa metadatos para los objetos ContractDescription y ServiceEndpoint. Puede exportar también una colección de objetos ServiceEndpoint y asociarlos a un nombre de servicios concreto.
Nota
WsdlExporter
solo puede utilizarse para exportar los metadatos desde las instancias ContractDescription
que contienen el tipo de información Common Language Runtime (CLR), como, por ejemplo, una instancia de ContractDescription
creada mediante el método ContractDescription.GetContract
, o como parte de ServiceDescription
de una instancia ServiceHost
. No puede utilizar WsdlExporter
para exportar metadatos a partir de las instancias ContractDescription
importadas desde los metadatos del servicio o construidas sin información del tipo.
Importación de metadatos
Importación de documentos WSDL
Para importar los metadatos del servicio en WCF, use una implementación de la clase abstracta MetadataImporter. El tipo System.ServiceModel.Description.WsdlImporter es la implementación de la clase abstracta MetadataImporter que se incluye en WCF. El tipo WsdlImporter importa metadatos de WSDL con directivas adjuntas empaquetadas en un objeto MetadataSet.
El tipo WsdlImporter le da control sobre cómo importar los metadatos. Puede importar todos los puntos de conexión, todos los enlaces o todos los contratos. Puede importar todos los puntos de conexión asociados a un servicio específico de WSDL, enlace o tipo de puerto. También puede importar el extremo de un puerto WSDL concreto, el enlace para un enlace de WSDL concreto o el contrato para un tipo de puerto de WSDL concreto.
WsdlImporter también expone una propiedad KnownContracts que le permite especificar un conjunto de contratos que no necesita ser importado. WsdlImporter utiliza los contratos en la propiedad KnownContracts en lugar de importar un contrato con el mismo nombre completo de los metadatos.
Importación de directivas
El tipo WsdlImporter recoge las expresiones de directivas adjuntas al mensaje, operación y los sujetos de directiva del punto de conexión y, a continuación, utiliza las implementaciones IPolicyImportExtension en la colección PolicyImportExtensions para importar las expresiones de directiva.
La lógica de importación de directiva administra automáticamente las referencias de directivas a las expresiones de directivas en el mismo documento WSDL y se identifica con un atributo wsu:Id
o xml:id
. La lógica de importación de directiva protege las aplicaciones frente a las referencias de directivas circulares, limitando el tamaño de una expresión de directiva a 4.096 nodos, donde un nodo es uno de los elementos siguientes: wsp:Policy
, wsp:All
, wsp:ExactlyOne
, wsp:policyReference
.
La lógica de importación de directiva normaliza también automáticamente las expresiones de directivas. No se normalizan las expresiones de directiva anidadas ni el atributo wsp:Optional
. La cantidad de procesamiento de normalización realizado se limita a 4.096 pasos, donde cada paso produce una aserción de directiva, o un elemento secundario de un elemento wsp:ExactlyOne
.
El tipo WsdlImporter prueba hasta 32 combinaciones de alternativas de directivas adjuntas a los distintos sujetos de directivas de WSDL. Si ninguna combinación se importa limpiamente, la primera combinación se utiliza para construir un enlace personalizado parcial.
Tratamiento de errores
Tanto el tipo MetadataExporter como MetadataImporter exponen una propiedad Errors
que puede contener una colección de mensajes de error y advertencia encontrados durante los procesos de exportación e importación respectivamente, que se puede utilizar al implementar las herramientas.
El tipo WsdlImporter generalmente produce una excepción para una excepción detectada durante el proceso de importación y agrega un error correspondiente a su propiedad Errors
. Los métodos ImportAllContracts, ImportAllBindings, ImportAllEndpointsy ImportEndpoints sin embargo, no producen estas excepciones, por lo que debe comprobar la propiedad Errors
para determinar si se produjo algún problema al llamar a estos métodos.
El tipo vuelve a producir WsdlExporter cualquier excepción detectada durante el proceso de exportación. Estas excepciones no se capturan como errores en la propiedad Errors
. Cuando WsdlExporter produce una excepción, está en un estado de error y no se puede reutilizar. WsdlExporter agrega advertencias a su propiedad Errors
cuando no se puede exportar una operación porque utiliza acciones de carácter comodín y cuando se encuentran nombres de enlace duplicados.
En esta sección
Procedimiento para importar metadatos a puntos de conexión de servicio
Describe cómo importar los metadatos descargados en objetos de descripción.
Procedimiento para exportar metadatos desde puntos de conexión de servicio
Describe cómo exportar objetos de descripción en metadatos.
ServiceDescription y referencias WSDL
Describe la asignación entre los objetos de descripción y WSDL.
Procedimiento para usar Svcutil.exe para exportar metadatos desde el código de servicio compilado
Describe el uso de Svcutil.exe para exportar metadatos para los servicios, contratos y tipos de datos en ensamblados compilados.
Referencia de esquema de contrato de datos
Describe el subconjunto del esquema XML (XSD) utilizado por DataContractSerializer para describir los tipos de Common Language Runtime (CLR) para la serialización XML.