Aracılığıyla paylaş


Nasıl yapılır: Hizmet Uç Noktalarına Meta Verileri İçe Aktarma

Bu konuda meta verilerin bir hizmet uç noktaları koleksiyonuna nasıl aktarılacağını ve Başlarken'de tanımlanan hizmetin nasıl kullanılacağı açıklanmaktadır. Bu konuda, hizmetten meta verileri içeri aktaran ve ardından hizmette yöntemini çağıran bir istemci uygulamasının Add nasıl oluşturulacağı gösterilmektedir.

Meta verileri hizmet uç noktalarına aktarmak için

  1. Bir EndpointAddress nesneyi bildirin ve hizmetin meta veri değişimi (MEX) adresi için Tekdüzen Kaynak Tanımlayıcısı (URI) ile başlatın.

    EndpointAddress mexAddress = new EndpointAddress("http://localhost:8000/ServiceModelSamples/service/mex");
    
  2. MetadataExchangeClientBIR oluşturun, MEX adresini geçirin ve öğesini çağırınGetMetadata. Bu, hizmetten meta verileri alır.

    MetadataExchangeClient mexClient = new MetadataExchangeClient(mexAddress);
    mexClient.ResolveMetadataReferences = true;
    MetadataSet metaSet = mexClient.GetMetadata();
    
  3. daha önce alınan meta verileri geçirerek bir WsdlImporteroluşturun ve öğesini çağırın ImportAllContracts. Bu, bir nesne koleksiyonu ContractDescription oluşturur. gereksinimlerinize bağlı olarak veya ImportAllBindingsöğesini de çağırabilirsinizImportAllEndpoints.

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

    Not

    Meta verileri içeri aktardıktan sonra bir istemci kanalı oluşturamaz veya meta verileri dışarı aktaramazsınız. Bunun nedeni, bu noktada kullanılabilir tür bilgisi olmamasıdır. Hizmetle gerçekten etkileşime geçmek veya meta verileri dışarı aktarmak için tür bilgileri gereklidir. Tür bilgilerini oluşturmak için 4. ve 5. adımlarda gösterilen kodu oluşturmanız gerekir. Alternatif olarak yardımcı sınıfını MetadataResolver kullanabilirsiniz. Daha fazla bilgi için bkz . Nasıl yapılır: Bağlama Meta Verilerini Dinamik Olarak Almak için MetadataResolver Kullanma.

  4. Her sözleşme için tür bilgileri oluşturun.

    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. Artık bu bilgileri kullanabilirsiniz. Aşağıdaki örnek C# kaynak kodu oluşturur.

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

Ayrıca bkz.