Aracılığıyla paylaş


Nasıl yapılır: Yapılandırma Dosyası Kullanarak Bir Hizmet için Meta Verileri Yayımlama

Bu, Bir Windows Communication Foundation (WCF) hizmeti için yayımlama meta verilerini gösteren iki nasıl yapılır konusundan biridir. Yapılandırma dosyası ve kod kullanarak hizmetin meta verileri nasıl yayımlaması gerektiğini belirtmenin iki yolu vardır. Bu konuda, yapılandırma dosyası kullanarak bir hizmet için meta verilerin nasıl yayımlanması gösterilmektedir.

Dikkat

Bu konu başlığında, meta verilerin güvenli olmayan bir şekilde nasıl yayımlanması gösterilmektedir. Herhangi bir istemci hizmetten meta verileri alabilir. Hizmetinizin meta verileri güvenli bir şekilde yayımlamasını istiyorsanız bkz . Özel Güvenli Meta Veri Uç Noktası.

Kodda meta verileri yayımlama hakkında daha fazla bilgi için bkz . Nasıl yapılır: Kod Kullanarak Hizmet için Meta Verileri Yayımlama. Meta verileri yayımlama, istemcilerin sorgu dizesini kullanarak WS-Transfer GET isteği veya HTTP/GET isteği kullanarak ?wsdl meta verileri almasını sağlar. Kodun çalıştığından emin olmak için temel bir WCF hizmeti oluşturun. Kolaylık olması için, aşağıdaki kodda temel bir şirket içinde barındırılan hizmet sağlanır.

using System;  
using System.Runtime.Serialization;  
using System.ServiceModel;  
using System.ServiceModel.Description;  
  
namespace Metadata.Samples  
{  
    [ServiceContract]  
    public interface ISimpleService  
    {  
        [OperationContract]  
        string SimpleMethod(string msg);  
    }  
  
    class SimpleService : ISimpleService  
    {  
        public string SimpleMethod(string msg)  
        {  
            Console.WriteLine("The caller passed in " + msg);  
            return "Hello " + msg;  
        }  
    }  
  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            ServiceHost host = new ServiceHost(typeof(SimpleService),  
                new Uri("http://localhost:8001/MetadataSample"));
            try  
            {  
                // Open the service host to accept incoming calls  
                host.Open();  
  
                // The service can now be accessed.  
                Console.WriteLine("The service is ready.");  
                Console.WriteLine("Press <ENTER> to terminate service.");  
                Console.WriteLine();  
                Console.ReadLine();  
  
                // Close the ServiceHostBase to shutdown the service.  
                host.Close();  
            }  
            catch (CommunicationException commProblem)  
            {  
                Console.WriteLine("There was a communication problem. " + commProblem.Message);  
                Console.Read();  
            }  
        }  
    }  
}  

Bu hizmet, yapılandırma dosyası kullanılarak yapılandırılan şirket içinde barındırılan bir hizmettir. Aşağıdaki yapılandırma dosyası bir başlangıç noktası görevi görür.

<configuration>  
  <system.serviceModel>  
    <services>  
      <service name="Metadata.Example.SimpleService">  
        <endpoint address=""  
                  binding="basicHttpBinding"  
                  contract="Metadata.Example.ISimpleService" />  
      </service>  
    </services>  
    <behaviors>  
  
    </behaviors>  
  </system.serviceModel>  
</configuration>  

Uygulama yapılandırma dosyası kullanarak WCF hizmetinin meta verilerini yayımlamak için

  1. App.config dosyasının içinde, kapanış </services> öğesinden sonra bir <behaviors> öğe oluşturun.

  2. öğesinin içine <behaviors> bir <serviceBehaviors> öğe ekleyin.

  3. öğesine bir <behavior> öğe <serviceBehaviors> ekleyin ve öğesinin name özniteliği <behavior> için bir değer belirtin.

  4. öğesine bir <serviceMetadata> öğe <behavior> ekleyin. özniteliğini httpGetEnabledtrue olarak ve özniteliğini policyVersion İlke15 olarak ayarlayın. httpGetEnabled hizmetin bir HTTP GET isteği tarafından yapılan meta veri isteklerini yanıtlamasına izin verir. policyVersion , meta veri oluştururken hizmete WS-policy 1.5'e uymasını bildirir.

  5. öğesine bir behaviorConfiguration öznitelik <service> ekleyin ve aşağıdaki kod örneğinde gösterildiği gibi 1. adımda eklenen öğenin özniteliğini <behavior> belirtinname.

    <services>  
      <service  
          name="Metadata.Example.SimpleService"  
          behaviorConfiguration="SimpleServiceBehavior">  
        ...  
      </service>  
    </services>  
    <behaviors>  
      <serviceBehaviors>  
        <behavior name="SimpleServiceBehavior">  
          <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" />  
        </behavior>  
      </serviceBehaviors>  
    </behaviors>  
    
  6. Aşağıdaki kod örneğinde gösterildiği gibi, sözleşme olarak IMetadataExchangeayarlanmış bir veya daha fazla <endpoint> öğe ekleyin.

    <services>  
      <service  
          name="Metadata.Example.SimpleService"  
          behaviorConfiguration="SimpleServiceBehavior">  
    
        <endpoint address=""  
                  binding="wsHttpBinding"  
                  contract="Metadata.Example.ISimpleService" />  
    
        <endpoint address="mex"  
                  binding="mexHttpBinding"  
                  contract="IMetadataExchange" />  
      </service>  
    </services>  
    
  7. Önceki adımda eklenen meta veri uç noktaları için özniteliğini binding aşağıdakilerden biri olarak ayarlayın:

    • mexHttpBinding http yayını için.

    • mexHttpsBinding https yayını için.

    • mexNamedPipeBinding adlandırılmış kanal yayını için.

    • mexTcpBinding TCP yayını için.

  8. Önceki adımda eklenen meta veri uç noktaları için adresi şuna eşit olarak ayarlayın:

    • Ana bilgisayar uygulamasının temel adresini, temel adres meta veri bağlama ile aynıysa yayın noktası olarak kullanmak için boş bir dize.

    • Konak uygulamasının temel adresi varsa göreli adres.

    • Mutlak adres.

  9. Konsol uygulamasını derleyin ve çalıştırın.

  10. Hizmetinhttp://localhost:8001/MetadataSample temel adresine (bu örnekte) göz atın ve meta veri yayımlamanın açık olduğunu doğrulayın. Aksi takdirde, sonuçta elde edilen sayfanın üst kısmındaki bir ileti görüntülenir: "Bu hizmet için meta veri yayımlama şu anda devre dışı."

Varsayılan uç noktaları kullanmak için

  1. Varsayılan uç noktaları kullanan bir hizmette meta verileri yapılandırmak için, önceki örnekte olduğu gibi yapılandırma dosyasında öğesini belirtin ServiceMetadataBehavior , ancak herhangi bir uç nokta belirtmeyin. Daha sonra yapılandırma dosyası şöyle görünür.

    <configuration>  
      <system.serviceModel>  
        <behaviors>  
          <serviceBehaviors>  
            <behavior name="SimpleServiceBehavior">  
              <serviceMetadata httpGetEnabled="True" policyVersion="Policy12" />  
            </behavior>  
          </serviceBehaviors>  
        </behaviors>  
    
      </system.serviceModel>  
    </configuration>  
    

    Hizmet, değerine ayarlanmış truebir ServiceMetadataBehaviorhttpGetEnabled değerine sahip olduğundan, hizmet yayımlama meta verilerini etkinleştirmiştir ve hiçbir uç nokta açıkça eklenmediğinden çalışma zamanı varsayılan uç noktaları ekler. Varsayılan uç noktalar, bağlamalar ve davranışlar hakkında daha fazla bilgi için bkz. WCF Hizmetleri için Basitleştirilmiş Yapılandırma ve Basitleştirilmiş Yapılandırma.

Örnek

Aşağıdaki kod örneği, temel bir WCF hizmetinin uygulamasını ve hizmet için meta verileri yayımlayan yapılandırma dosyasını gösterir.

using System;  
using System.Runtime.Serialization;  
using System.ServiceModel;  
using System.ServiceModel.Description;  
  
namespace Metadata.Samples  
{  
    [ServiceContract]  
    public interface ISimpleService  
    {  
        [OperationContract]  
        string SimpleMethod(string msg);  
    }  
  
    class SimpleService : ISimpleService  
    {  
        public string SimpleMethod(string msg)  
        {  
            Console.WriteLine("The caller passed in " + msg);  
            return "Hello " + msg;  
        }  
    }  
  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            ServiceHost host = new ServiceHost(typeof(SimpleService),  
                new Uri("http://localhost:8001/MetadataSample"));
            try  
            {  
                // Open the service host to accept incoming calls  
                host.Open();  
  
                // The service can now be accessed.  
                Console.WriteLine("The service is ready.");  
                Console.WriteLine("Press <ENTER> to terminate service.");  
                Console.WriteLine();  
                Console.ReadLine();  
  
                // Close the ServiceHostBase to shutdown the service.  
                host.Close();  
            }  
            catch (CommunicationException commProblem)  
            {  
                Console.WriteLine("There was a communication problem. " + commProblem.Message);  
                Console.Read();  
            }  
        }  
    }  
}  
<configuration>  
  <system.serviceModel>  
    <behaviors>  
      <serviceBehaviors>  
        <behavior name="SimpleServiceBehavior">  
          <serviceMetadata httpGetEnabled="True" policyVersion="Policy12" />  
          <serviceDebug includeExceptionDetailInFaults="False" />  
        </behavior>  
      </serviceBehaviors>  
    </behaviors>  
  </system.serviceModel>  
</configuration>  

Ayrıca bkz.