Delen via


Procedure: Metagegevens importeren in service-eindpunten

In dit onderwerp wordt uitgelegd hoe u metagegevens importeert in een verzameling service-eindpunten en hoe u de service gebruikt die is gedefinieerd in aan de slag. In dit onderwerp wordt uitgelegd hoe u een clienttoepassing maakt waarmee metagegevens uit de service worden geïmporteerd en vervolgens de Add methode voor de service wordt aangeroepen.

Metagegevens importeren in service-eindpunten

  1. Declareer een EndpointAddress object en initialiseer het met de URI (Uniform Resource Identifier) voor het adres van de metagegevensuitwisseling (MEX) van de service.

    EndpointAddress mexAddress = new EndpointAddress("http://localhost:8000/ServiceModelSamples/service/mex");
    
  2. Maak een MetadataExchangeClient, geef het MEX-adres door en roep aan GetMetadata. Hiermee worden de metagegevens opgehaald uit de service.

    MetadataExchangeClient mexClient = new MetadataExchangeClient(mexAddress);
    mexClient.ResolveMetadataReferences = true;
    MetadataSet metaSet = mexClient.GetMetadata();
    
  3. Maak een WsdlImporter, geef de metagegevens door die eerder zijn opgehaald en roep deze ImportAllContractsaan. Hiermee wordt een verzameling ContractDescription objecten gegenereerd. U kunt ook bellen ImportAllEndpoints of ImportAllBindings, afhankelijk van uw behoeften.

    WsdlImporter importer = new WsdlImporter(metaSet);
    System.Collections.ObjectModel.Collection<ContractDescription> contracts = importer.ImportAllContracts();
    

    Notitie

    Nadat u de metagegevens hebt geïmporteerd, kunt u geen clientkanaal maken of de metagegevens exporteren. Dit komt doordat op dit moment geen typegegevens beschikbaar zijn. Typegegevens zijn vereist om daadwerkelijk te communiceren met de service of metagegevens te exporteren. Als u de typegegevens wilt genereren, moet u code genereren, zoals wordt weergegeven in stap 4 en 5. U kunt ook de MetadataResolver helperklasse gebruiken. Zie Voor meer informatie : MetadataResolver gebruiken om bindingsmetagegevens dynamisch te verkrijgen.

  4. Typegegevens genereren voor elk contract.

    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. U kunt deze informatie nu gebruiken. In het volgende voorbeeld wordt C#-broncode gegenereerd.

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

Zie ook