Sdílet prostřednictvím


Postupy: Import metadat do koncových bodů služby

Toto téma vysvětluje, jak importovat metadata do kolekce koncových bodů služby a používat službu definovanou v části Začínáme. Toto téma ukazuje, jak vytvořit klientskou aplikaci, která importuje metadata ze služby a pak volá metodu Add ve službě.

Import metadat do koncových bodů služby

  1. EndpointAddress Deklarujte objekt a inicializujete ho pomocí identifikátoru URI (Uniform Resource Identifier) pro adresu výměny metadat (MEX) služby.

    EndpointAddress mexAddress = new EndpointAddress("http://localhost:8000/ServiceModelSamples/service/mex");
    
  2. Vytvořte MetadataExchangeClientadresu MEX a volejte GetMetadata. Tím se načte metadata ze služby.

    MetadataExchangeClient mexClient = new MetadataExchangeClient(mexAddress);
    mexClient.ResolveMetadataReferences = true;
    MetadataSet metaSet = mexClient.GetMetadata();
    
  3. WsdlImporterVytvořte , předejte metadata dříve načtena a volání ImportAllContracts. Tím se vygeneruje kolekce ContractDescription objektů. Můžete také zavolat ImportAllEndpoints nebo ImportAllBindingsv závislosti na vašich potřebách.

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

    Poznámka:

    Po importu metadat nebudete moct vytvořit klientský kanál ani exportovat metadata. Důvodem je to, že v tuto chvíli nejsou k dispozici žádné informace o typu. Informace o typu se vyžadují k skutečné interakci se službou nebo exportem metadat. Pokud chcete vygenerovat informace o typu, musíte vygenerovat kód uvedený v krocích 4 a 5. Případně můžete použít pomocnou MetadataResolver třídu. Další informace naleznete v tématu Postupy: Použití MetadataResolver k dynamickému získání metadat vazby.

  4. Vygenerujte informace o typu pro každý kontrakt.

    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. Tyto informace teď můžete použít. Následující ukázka vygeneruje zdrojový kód jazyka 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();
    

Viz také