Compartir a través de


Cómo: Importar metadatos en extremos de servicio

En este tema se explica cómo importar los metadatos en una colección de extremos de servicio y utilizar el servicio definido en Ejemplo de introducción. En este tema se muestra cómo crear una aplicación cliente que importa los metadatos desde el servicio y, a continuación, llama al método Add en el servicio.

Para importar metadatos a extremos de servicio

  1. Declare un objeto EndpointAddress e inicialícelo con el Identificador uniforme de recursos (URI) para la dirección del servicio de intercambio de metadatos (MEX).

    EndpointAddress mexAddress = new EndpointAddress("https://localhost:8000/ServiceModelSamples/service/mex");
    
  2. Cree MetadataExchangeClient, pasando la dirección de MEX y llame GetMetadata. Esto recupera los metadatos del servicio.

    MetadataExchangeClient mexClient = new MetadataExchangeClient(mexAddress);
    mexClient.ResolveMetadataReferences = true;
    MetadataSet metaSet = mexClient.GetMetadata();
    
  3. Cree WsdlImporter, pasando los metadatos previamente recuperados y llame ImportAllContracts. Esto genera una colección de los objetos ContractDescription. También podría llamar ImportAllEndpoints o ImportAllBindings, dependiendo de sus necesidades.

    WsdlImporter importer = new WsdlImporter(metaSet);
    System.Collections.ObjectModel.Collection<ContractDescription> contracts = importer.ImportAllContracts();
    
    ms733780.note(es-es,VS.100).gifNota:
    Después de haber importado los metadatos, no podrá crear un canal de cliente o exportar los metadatos. Esto es porque ninguna información de tipo está disponible en este punto. Se exige información de tipo para interactuar realmente con el servicio o exportar los metadatos. Para generar la información de tipo, necesita generar el código, tal como se muestra en los pasos 4 y 5. También podría utilizar la clase auxiliar MetadataResolver. Para obtener más información, vea Cómo: Utilizar MetadataResolver para obtener dinámicamente metadatos de enlace.

  4. Genere información de tipo para cada contrato.

    ServiceContractGenerator generator = new ServiceContractGenerator();
    foreach (ContractDescription contract in contracts)
    {
        generator.GenerateServiceContractType(contract);
    }
    
    if (generator.Errors.Count != 0)
        throw new Exception("There were errors during code compilation.");
    
  5. Ahora puede utilizar esta información. El ejemplo siguiente genera el código fuente C#:

    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();
    

Vea también

Tareas

Ejemplo de introducción

Conceptos

Metadatos