MetadataImporter Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Importa los metadatos en objetos ServiceEndpoint.
public ref class MetadataImporter abstract
public abstract class MetadataImporter
type MetadataImporter = class
Public MustInherit Class MetadataImporter
- Herencia
-
MetadataImporter
- Derivado
Ejemplos
El ejemplo siguiente muestra el uso de la clase derivada System.ServiceModel.Description.WsdlImporter para importar metadatos mediante el estado personalizado, comprobando la propiedad Errors, compilando los metadatos importados a los tipos administrados y guardando el resultado en un archivo de código.
static void GenerateCSCodeForService(EndpointAddress metadataAddress, string outputFile)
{
MetadataExchangeClient mexClient = new MetadataExchangeClient(metadataAddress);
mexClient.ResolveMetadataReferences = true;
MetadataSet metaDocs = mexClient.GetMetadata();
WsdlImporter importer = new WsdlImporter(metaDocs);
ServiceContractGenerator generator = new ServiceContractGenerator();
// Add our custom DCAnnotationSurrogate
// to write XSD annotations into the comments.
object dataContractImporter;
XsdDataContractImporter xsdDCImporter;
if (!importer.State.TryGetValue(typeof(XsdDataContractImporter), out dataContractImporter))
{
Console.WriteLine("Couldn't find the XsdDataContractImporter! Adding custom importer.");
xsdDCImporter = new XsdDataContractImporter();
xsdDCImporter.Options = new ImportOptions();
importer.State.Add(typeof(XsdDataContractImporter), xsdDCImporter);
}
else
{
xsdDCImporter = (XsdDataContractImporter)dataContractImporter;
if (xsdDCImporter.Options == null)
{
Console.WriteLine("There were no ImportOptions on the importer.");
xsdDCImporter.Options = new ImportOptions();
}
}
xsdDCImporter.Options.DataContractSurrogate = new DCAnnotationSurrogate();
// Uncomment the following code if you are going to do your work programmatically rather than add
// the WsdlDocumentationImporters through a configuration file.
/*
// The following code inserts a custom WsdlImporter without removing the other
// importers already in the collection.
System.Collections.Generic.IEnumerable<IWsdlImportExtension> exts = importer.WsdlImportExtensions;
System.Collections.Generic.List<IWsdlImportExtension> newExts
= new System.Collections.Generic.List<IWsdlImportExtension>();
foreach (IWsdlImportExtension ext in exts)
{
Console.WriteLine("Default WSDL import extensions: {0}", ext.GetType().Name);
newExts.Add(ext);
}
newExts.Add(new WsdlDocumentationImporter());
System.Collections.Generic.IEnumerable<IPolicyImportExtension> polExts = importer.PolicyImportExtensions;
importer = new WsdlImporter(metaDocs, polExts, newExts);
*/
System.Collections.ObjectModel.Collection<ContractDescription> contracts
= importer.ImportAllContracts();
importer.ImportAllEndpoints();
foreach (ContractDescription contract in contracts)
{
generator.GenerateServiceContractType(contract);
}
if (generator.Errors.Count != 0)
throw new Exception("There were errors during code compilation.");
// Write the code dom
System.CodeDom.Compiler.CodeGeneratorOptions options
= new System.CodeDom.Compiler.CodeGeneratorOptions();
options.BracingStyle = "C";
System.CodeDom.Compiler.CodeDomProvider codeDomProvider
= System.CodeDom.Compiler.CodeDomProvider.CreateProvider("C#");
System.CodeDom.Compiler.IndentedTextWriter textWriter
= new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFile));
codeDomProvider.GenerateCodeFromCompileUnit(
generator.TargetCompileUnit, textWriter, options
);
textWriter.Close();
}
Comentarios
Para importar los metadatos del servicio utilice una implementación de la clase abstracta MetadataImporter. 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 Windows Communication Foundation (WCF).
Una implementación de MetadataImporter recoge las expresiones de directivas asociadas a los metadatos del servicio en un objeto System.ServiceModel.Description.PolicyConversionContext. MetadataImporter procesa, a continuación, las directivas como parte de la importación de los metadatos llamando a las implementaciones de la interfaz System.ServiceModel.Description.IPolicyImportExtension de la propiedad MetadataImporter.PolicyImportExtensions.
Puede agregar compatibilidad para la importación de nuevas aserciones de directivas en un MetadataImporter agregando su propia implementación de la interfaz System.ServiceModel.Description.IPolicyImportExtension a la propiedad MetadataImporter.PolicyImportExtensions en una instancia MetadataImporter. De manera alternativa, puede registrar su extensión de importación de directivas en el archivo de configuración de la aplicación.
El tipo System.ServiceModel.Description.WsdlImporter es la implementación de la clase abstracta MetadataImporter que se incluye en WCF. El tipo System.ServiceModel.Description.WsdlImporter importa metadatos del WSDL con directivas adjuntas que se empaquetan en un objeto System.ServiceModel.Description.MetadataSet.
Puede agregar compatibilidad para la importación de extensiones WSDL implementando la interfaz System.ServiceModel.Description.IWsdlImportExtension y agregando, a continuación, su implementación a la propiedad WsdlImporter.WsdlImportExtensions de su instancia System.ServiceModel.Description.WsdlImporter. System.ServiceModel.Description.WsdlImporter también puede cargar las implementaciones de la interfaz System.ServiceModel.Description.IWsdlImportExtension registradas en su archivo de configuración de la aplicación.
Nota:
Dado que el constructor MetadataImporter es interno, no puede derivar de MetadataImporter en esta versión.
Propiedades
Errors |
Obtiene un valor que indica si hubo errores al importar los metadatos. |
KnownContracts |
Obtiene un diccionario de contratos por nombre que es conocido por el importador. |
PolicyImportExtensions |
Obtiene una colección de importadores de directiva a los que el importador llama para procesar las aserciones de directiva. |
State |
Obtiene o establece una colección de objetos utilizada en la importación de metadatos. |
Métodos
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
ImportAllContracts() |
Cuando se invalida en una clase derivada, devuelve una colección de contratos importados de los metadatos. |
ImportAllEndpoints() |
Cuando se invalida en una clase derivada, devuelve todos los puntos de conexión en los metadatos. |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |