Nasıl yapılır: Özel Bir WS-Metadata Değişimi Bağlaması Yapılandırma

Bu makalede özel bir WS-Metadata değişim bağlamasını yapılandırma işlemi açıklanmaktadır. Windows Communication Foundation (WCF) dört sistem tanımlı meta veri bağlaması içerir, ancak istediğiniz bağlamayı kullanarak meta verileri yayımlayabilirsiniz. Bu makalede, kullanarak meta verileri yayımlama işlemi gösterilmektedir wsHttpBinding. Bu bağlama, meta verileri güvenli bir şekilde ortaya çıkarma seçeneği sunar. Bu makaledeki kod, Başlarken'i temel alır.

Yapılandırma dosyası kullanma

  1. Hizmetin yapılandırma dosyasında, etiketini içeren serviceMetadata bir hizmet davranışı ekleyin:

    <behaviors>  
       <serviceBehaviors>  
         <behavior name="CalculatorServiceBehavior">  
           <serviceMetadata httpGetEnabled="True"/>  
         </behavior>  
       </serviceBehaviors>  
    </behaviors>  
    
  2. Hizmet etiketine bu yeni davranışa başvuran bir behaviorConfiguration öznitelik ekleyin:

    <service name="Microsoft.ServiceModel.Samples.CalculatorService"  
    behaviorConfiguration="CalculatorServiceBehavior" />
    
  3. Adres olarak mex, wsHttpBinding bağlama ve IMetadataExchange sözleşme olarak mex belirten bir meta veri uç noktası ekleyin:

    <endpoint address="mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange" />  
    
  4. Meta veri değişim uç noktasının düzgün çalıştığını doğrulamak için istemci yapılandırma dosyasına bir uç nokta etiketi ekleyin:

    <endpoint name="MyMexEndpoint"               address="http://localhost:8000/servicemodelsamples/service/mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange"/>  
    
  5. İstemcinin Main() yönteminde yeni MetadataExchangeClient bir örnek oluşturun, özelliğini olarak trueayarlayınResolveMetadataReferences, çağrısı GetMetadata yapın ve döndürülen meta veri koleksiyonunda yineleyin:

    string mexAddress = "http://localhost:8000/servicemodelsamples/service/mex";  
    
    MetadataExchangeClient mexClient = new MetadataExchangeClient("MyMexEndpoint");  
    mexClient.ResolveMetadataReferences = true;  
    MetadataSet mdSet = mexClient.GetMetadata(new EndpointAddress(mexAddress));  
    foreach (MetadataSection section in mdSet.MetadataSections)  
    Console.WriteLine("Metadata section: " + section.Dialect.ToString());  
    

Koda göre yapılandırma

  1. WSHttpBinding Bağlama örneği oluşturma:

    WSHttpBinding binding = new WSHttpBinding();  
    
  2. ServiceHost Örnek oluşturma:

    ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);  
    
  3. Hizmet uç noktası ekleyin ve bir ServiceMetadataBehavior örnek ekleyin:

    serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, baseAddress);  
    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();  
    smb.HttpGetEnabled = true;  
    serviceHost.Description.Behaviors.Add(smb);  
    
  4. Daha önce oluşturulan öğesini WSHttpBinding belirterek bir meta veri değişim uç noktası ekleyin:

    serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);  
    
  5. Meta veri değişim uç noktasının düzgün çalıştığını doğrulamak için istemci yapılandırma dosyasına bir uç nokta etiketi ekleyin:

    <endpoint name="MyMexEndpoint"               address="http://localhost:8000/servicemodelsamples/service/mex"  
              binding="wsHttpBinding"  
              contract="IMetadataExchange"/>  
    
  6. İstemcinin Main() yönteminde yeni MetadataExchangeClient bir örnek oluşturun, özelliğini olarak trueayarlayınResolveMetadataReferences, çağrısı GetMetadata yapın ve döndürülen meta veri koleksiyonunda yineleyin:

    string mexAddress = "http://localhost:8000/servicemodelsamples/service/mex";  
    
    MetadataExchangeClient mexClient = new MetadataExchangeClient("MyMexEndpoint");  
    mexClient.ResolveMetadataReferences = true;  
    MetadataSet mdSet = mexClient.GetMetadata(new EndpointAddress(mexAddress));  
    foreach (MetadataSection section in mdSet.MetadataSections)  
    Console.WriteLine("Metadata section: " + section.Dialect.ToString());  
    

Ayrıca bkz.