Vorgehensweise: Importieren von Metadaten in DienstendpunkteHow to: Import Metadata into Service Endpoints

In diesem Thema wird erläutert, wie zum Importieren von Metadaten in eine Auflistung von Dienstendpunkten und verwenden Sie den Dienst definiert, der Einstieg.This topic explains how to import metadata into a collection of service endpoints and use the service defined in the Getting Started. Im Thema wird gezeigt, wie Sie eine Clientanwendung erstellen, die Metadaten aus dem Dienst importiert und anschließend dieAdd-Methode für den Dienst aufruft.This topic show how to create a client application that imports metadata from the service and then calls the Add method on the service.

So importieren Sie Metadaten in DienstendpunkteTo import metadata into service endpoints

  1. Deklarieren Sie ein EndpointAddress-Objekt, und initialisieren Sie es mit dem Uniform Resource Identifier (URI) für die Metadatenaustausch-Adresse (MEX) des Dienstes.Declare an EndpointAddress object and initialize it with the Uniform Resource Identifier (URI) for the metadata exchange (MEX) address of the service.

    EndpointAddress mexAddress = new EndpointAddress("http://localhost:8000/ServiceModelSamples/service/mex");
    
  2. Erstellen Sie einen MetadataExchangeClient, der die MEX-Adresse übergibt, und rufen Sie GetMetadata auf.Create a MetadataExchangeClient, passing in the MEX address, and call GetMetadata. Auf diese Weise werden die Metadaten aus dem Dienst abgerufen.This retrieves the metadata from the service.

    MetadataExchangeClient mexClient = new MetadataExchangeClient(mexAddress);
    mexClient.ResolveMetadataReferences = true;
    MetadataSet metaSet = mexClient.GetMetadata();
    
  3. Erstellen Sie einen WsdlImporter, der die vorher abgerufenen Metadaten übergibt, und rufen Sie ImportAllContracts auf.Create a WsdlImporter, passing in the metadata previously retrieved, and call ImportAllContracts. Dadurch wird eine Auflistung der ContractDescription-Objekte erzeugt.This generates a collection of ContractDescription objects. Sie können je nach Ihren Anforderungen auch ImportAllEndpoints oder ImportAllBindings aufrufen.You could also call ImportAllEndpoints or ImportAllBindings, depending upon your needs.

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

    Hinweis

    Nachdem Sie die Metadaten importiert haben, können Sie keinen Clientkanal mehr erstellen oder die Metadaten exportieren.After you have imported the metadata, you will not be able to create a client channel or export the metadata. Dies liegt daran, dass an diesem Punkt keine Typinformationen verfügbar sind.This is because no type information is available at this point. Typinformationen sind erforderlich, um direkt mit dem Dienst zu interagieren oder Metadaten zu exportieren.Type information is required to actually interact with the service or export metadata. Um die Typinformationen zu erzeugen, müssen Sie den in den Schritten 4 und 5 gezeigten Code generieren.To generate the type information, you need to generate code, shown in steps 4 and 5. Alternativ dazu können Sie auch die MetadataResolver-Hilfsklasse verwenden.Alternatively, you could use the MetadataResolver helper class. Weitere Informationen finden Sie unter wie: Verwenden von MetadataResolver, erhalten Dynamisches Binden von Metadaten.For more information, see How to: Use MetadataResolver to Obtain Binding Metadata Dynamically.

  4. Generieren Sie Typinformationen für jeden Vertrag.Generate type information for each 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. Jetzt können Sie diese Informationen verwenden.Now you can use this information. Im folgenden Beispiel wird C#-Quellcode generiert.The following sample generates C# source code.

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

Siehe auchSee Also

MetadatenMetadata
Erste SchritteGetting Started