Yapılandırma Dosyalarını Kullanarak Hizmetleri Yapılandırma

Windows Communication Foundation (WCF) hizmetini yapılandırma dosyasıyla yapılandırmak, dağıtım noktasında tasarım zamanında değil, uç nokta ve hizmet davranışı verileri sağlama esnekliği sağlar. Bu konuda, kullanılabilir birincil teknikler özetlenmiştir.

WCF hizmeti .NET Framework yapılandırma teknolojisi kullanılarak yapılandırılabilir. En yaygın olarak, XML öğeleri bir WCF hizmetini barındıran Internet Information Services (IIS) sitesinin Web.config dosyasına eklenir. Öğeler, uç nokta adresleri (hizmetle iletişim kurmak için kullanılan gerçek adresler) gibi ayrıntıları makine bazında değiştirmenize olanak sağlar. Ayrıca WCF, bir hizmet için en temel özellikleri hızla seçmenize olanak sağlayan sistem tarafından sağlanan birkaç öğe içerir. .NET Framework 4'den başlayarak WCF, WCF yapılandırma gereksinimlerini basitleştiren yeni bir varsayılan yapılandırma modeliyle birlikte gelir. Belirli bir hizmet için herhangi bir WCF yapılandırması sağlamazsanız, çalışma zamanı hizmetinizi bazı standart uç noktalar ve varsayılan bağlama/davranış ile otomatik olarak yapılandırılır. Pratikte, yazma yapılandırması WCF uygulamalarını programlamanın önemli bir parçasıdır.

Daha fazla bilgi için bkz . Hizmetler için Bağlamaları Yapılandırma. En yaygın kullanılan öğelerin listesi için bkz . Sistem Tarafından Sağlanan Bağlamalar. 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.

Önemli

Bir hizmetin iki farklı sürümünün dağıtıldığı yan yana senaryoları dağıtırken, yapılandırma dosyalarında başvurulan derlemelerin kısmi adlarının belirtilmesi gerekir. Bunun nedeni, yapılandırma dosyasının bir hizmetin tüm sürümleri arasında paylaşılması ve .NET Framework'ün farklı sürümleri altında çalışıyor olmasıdır.

System.Configuration: Web.config ve App.config

WCF, .NET Framework'ün System.Configuration yapılandırma sistemini kullanır.

Visual Studio'da bir hizmeti yapılandırırken, ayarları belirtmek için bir Web.config dosyası veya App.config dosyası kullanın. Yapılandırma dosyası adı seçimi, hizmet için seçtiğiniz barındırma ortamı tarafından belirlenir. Hizmetinizi barındırmak için IIS kullanıyorsanız bir Web.config dosyası kullanın. Başka bir barındırma ortamı kullanıyorsanız bir App.config dosyası kullanın.

Visual Studio'da App.config adlı dosya, son yapılandırma dosyasını oluşturmak için kullanılır. Yapılandırma için kullanılan son ad, derleme adına bağlıdır. Örneğin, "Cohowinery.exe" adlı derlemenin son yapılandırma dosyası adı "Cohowinery.exe.config" olur. Ancak, yalnızca App.config dosyasını değiştirmeniz gerekir. Bu dosyada yapılan değişiklikler, derleme zamanında son uygulama yapılandırma dosyasında otomatik olarak yapılır.

App.config kullanarak, uygulama başlatıldığında ve yapılandırma uygulandığında yapılandırma sistemi App.config dosyasını Machine.config dosyasının içeriğiyle birleştirir. Bu mekanizma, makine genelindeki ayarların Machine.config dosyasında tanımlanmasını sağlar. App.config dosyası Machine.config dosyasının ayarlarını geçersiz kılmak için kullanılabilir; Ayrıca Machine.config dosyasındaki ayarları kilitleyebilir ve bu ayarların kullanılmasını sağlayabilirsiniz. Web.config durumunda, yapılandırma sistemi uygulama dizinine giden tüm dizinlerdeki Web.config dosyalarını uygulanan yapılandırmayla birleştirir. Yapılandırma ve ayar öncelikleri hakkında daha fazla bilgi için ad alanında konu başlıklarına System.Configuration bakın.

Yapılandırma Dosyasının Ana Bölümleri

Yapılandırma dosyasındaki ana bölümler aşağıdaki öğeleri içerir.

<system.ServiceModel>  
  
   <services>  
   <!-- Define the service endpoints. This section is optional in the new  
    default configuration model in .NET Framework 4. -->  
      <service>  
         <endpoint/>  
      </service>  
   </services>  
  
   <bindings>  
   <!-- Specify one or more of the system-provided binding elements,  
    for example, <basicHttpBinding> -->
   <!-- Alternatively, <customBinding> elements. -->  
      <binding>  
      <!-- For example, a <BasicHttpBinding> element. -->  
      </binding>  
   </bindings>  
  
   <behaviors>  
   <!-- One or more of the system-provided or custom behavior elements. -->  
      <behavior>  
      <!-- For example, a <throttling> element. -->  
      </behavior>  
   </behaviors>  
  
</system.ServiceModel>  

Not

Bağlamalar ve davranışlar bölümleri isteğe bağlıdır ve yalnızca gerekirse eklenir.

<services> Öğesi

öğesi, services uygulama konakları tüm hizmetlerin belirtimlerini içerir. .NET Framework 4'teki basitleştirilmiş yapılandırma modeliyle başlayarak, bu bölüm isteğe bağlıdır.

<services>

<service> Öğesi

Her hizmetin şu öznitelikleri vardır:

  • name. Hizmet sözleşmesinin uygulanmasını sağlayan türü belirtir. Bu ad alanı, nokta ve ardından tür adından oluşan tam addır. Örneğin, "MyNameSpace.myServiceType".

  • behaviorConfiguration. öğesinde behaviors bulunan öğelerden behavior birinin adını belirtir. Belirtilen davranış, hizmetin kimliğe bürünme izni verip vermediği gibi eylemleri yönetir. Değeri boş adsa veya hayır behaviorConfiguration sağlanmışsa, hizmete varsayılan hizmet davranışı kümesi eklenir.

  • <Hizmet>

<endpoint> Öğesi

Her uç nokta, aşağıdaki özniteliklerle temsil edilen bir adres, bağlama ve bir sözleşme gerektirir:

  • address. Hizmetin tekdüzen Kaynak Tanımlayıcısını (URI) belirtir. Bu, mutlak bir adres veya hizmetin temel adresine göre verilen bir adres olabilir. Boş bir dizeye ayarlanırsa, uç noktanın hizmet için oluşturulurken ServiceHost belirtilen temel adreste kullanılabilir olduğunu gösterir.

  • binding. Genellikle gibi WSHttpBindingsistem tarafından sağlanan bir bağlama belirtir, ancak kullanıcı tanımlı bir bağlama da belirtebilir. Belirtilen bağlama aktarım türünü, kullanılan güvenlik ve kodlamayı ve güvenilir oturumların, işlemlerin veya akışın desteklenip desteklenmediğini veya etkinleştirilip etkinleştirilmediğini belirler.

  • bindingConfiguration. Bir bağlamanın varsayılan değerlerinin değiştirilmesi gerekiyorsa, öğesinde bindings uygun binding öğe yapılandırılarak bu yapılabilir. Bu öznitelik, varsayılanları değiştirmek için kullanılan öğenin özniteliğiyle binding aynı değer name verilmelidir. Bağlamada ad belirtilmezse veya belirtilmezse bindingConfiguration , uç noktada bağlama türünün varsayılan bağlaması kullanılır.

  • contract. Sözleşmeyi tanımlayan arabirimi belirtir. Bu, öğesinin özniteliği tarafından name belirtilen ortak dil çalışma zamanı (CLR) türünde uygulanan arabirimdir service .

  • <Bitiş noktası>

<Bindings> Öğesi

öğesi, bindings herhangi bir hizmette tanımlanan herhangi bir uç nokta tarafından kullanılabilecek tüm bağlamaların belirtimlerini içerir.

<Bağlama>

<Bağlama> Öğesi

binding öğesinde bindings yer alan öğeler, sistem tarafından sağlanan bağlamalardan biri (bkz. Sistem Tarafından Sağlanan Bağlamalar) veya özel bağlama (bkz. Özel Bağlamalar). öğesininbinding, bağlamayı öğesinin özniteliğinde bindingConfiguration belirtilen uç noktayla ilişkilendiren bir name özniteliği endpoint vardır. Ad belirtilmezse, bu bağlama bu bağlama türünün varsayılan değerine karşılık gelir.

Hizmetleri ve istemcileri yapılandırma hakkında daha fazla bilgi için bkz . WCF hizmetlerini yapılandırma.

<Bağlama>

<behaviors> Öğesi

Bu, bir hizmetin davranışlarını tanımlayan öğelere yönelik bir kapsayıcı öğesidir behavior .

<Davranış>

<behavior> Öğesi

Her behavior öğe bir name öznitelik tarafından tanımlanır ve gibi <throttling>sistem tarafından sağlanan bir davranış veya özel bir davranış sağlar. Ad verilmezse, bu davranış öğesi varsayılan hizmet veya uç nokta davranışına karşılık gelir.

<Davranış>

Bağlama ve Davranış Yapılandırmalarını Kullanma

WCF, yapılandırmada bir başvuru sistemi kullanarak yapılandırmaları uç noktalar arasında paylaşmayı kolaylaştırır. Yapılandırma değerlerini bir uç noktaya doğrudan atamak yerine bağlamayla ilgili yapılandırma değerleri bölümündeki öğelerde bindingConfiguration<binding> gruplandırılır. Bağlama yapılandırması, bağlamadaki adlandırılmış bir ayar grubudur. Uç noktalar daha sonra ada göre başvurabilir bindingConfiguration .

<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
 <system.serviceModel>  
  <bindings>  
    <basicHttpBinding>  
     <binding name="myBindingConfiguration1" closeTimeout="00:01:00" />  
     <binding name="myBindingConfiguration2" closeTimeout="00:02:00" />  
     <binding closeTimeout="00:03:00" />  <!-- Default binding for basicHttpBinding -->  
    </basicHttpBinding>  
     </bindings>  
     <services>  
      <service name="MyNamespace.myServiceType">  
       <endpoint
          address="myAddress" binding="basicHttpBinding"
          bindingConfiguration="myBindingConfiguration1"  
          contract="MyContract"  />  
       <endpoint
          address="myAddress2" binding="basicHttpBinding"
          bindingConfiguration="myBindingConfiguration2"  
          contract="MyContract" />  
       <endpoint
          address="myAddress3" binding="basicHttpBinding"
          contract="MyContract" />  
       </service>  
      </services>  
    </system.serviceModel>  
</configuration>  

name öğesinde bindingConfiguration<binding> ayarlanır. bağlama name türü kapsamında benzersiz bir dize olmalıdır; bu örnekte <temelHttpBinding> veya varsayılan bağlamaya başvurmak için boş bir değer olmalıdır. Uç nokta, özniteliğini bu dizeye bindingConfiguration ayarlayarak yapılandırmaya bağlanır.

A behaviorConfiguration , aşağıdaki örnekte gösterildiği gibi aynı şekilde uygulanır.

<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
  <system.serviceModel>  
    <behaviors>  
      <endpointBehaviors>  
        <behavior name="myBehavior">  
           <callbackDebug includeExceptionDetailInFaults="true" />  
         </behavior>  
      </endpointBehaviors>  
      <serviceBehaviors>  
        <behavior>  
          <serviceMetadata httpGetEnabled="true" />  
        </behavior>  
      </serviceBehaviors>  
  
    </behaviors>  
    <services>  
     <service name="NewServiceType">  
       <endpoint
          address="myAddress3" behaviorConfiguration="myBehavior"  
          binding="basicHttpBinding"  
          contract="MyContract" />  
      </service>  
    </services>  
   </system.serviceModel>  
</configuration>  

Varsayılan hizmet davranışı kümesinin hizmete eklendiğini unutmayın. Bu sistem, uç noktaların ayarları yeniden tanımlamadan ortak yapılandırmaları paylaşmasına olanak tanır. Makine genelinde kapsam gerekiyorsa, Machine.config içinde bağlama veya davranış yapılandırmasını oluşturun. Yapılandırma ayarları tüm App.config dosyalarında kullanılabilir. Yapılandırma Düzenleyicisi Aracı (SvcConfigEditor.exe) yapılandırma oluşturmayı kolaylaştırır.

Davranış Birleştirme

Davranış birleştirme özelliği, bir dizi ortak davranışın tutarlı bir şekilde kullanılmasını istediğinizde davranışları yönetmeyi kolaylaştırır. Bu özellik, yapılandırma hiyerarşisinin farklı düzeylerinde davranışlar belirtmenize ve hizmetlerin yapılandırma hiyerarşisinin birden çok düzeyinden davranışları devralmasını sağlar. Bunun nasıl çalıştığını göstermek için IIS'de aşağıdaki sanal dizin düzenine sahip olduğunuzu varsayalım:

~\Web.config~\Service.svc~\Child\Web.config~\Child\Service.svc

Dosyanız ~\Web.config aşağıdaki içeriklere sahiptir:

<configuration>  
  <system.serviceModel>  
    <behaviors>  
      <serviceBehaviors>  
        <behavior>  
          <serviceDebug includeExceptionDetailInFaults="True" />  
        </behavior>  
      </serviceBehaviors>  
    </behaviors>  
  </system.serviceModel>  
</configuration>  

~\Child\Web.config konumunda aşağıdaki içeriklere sahip bir alt Web.config'iniz var:

<configuration>  
  <system.serviceModel>  
    <behaviors>  
      <serviceBehaviors>  
        <behavior>  
          <serviceMetadata httpGetEnabled="True" />  
        </behavior>  
      </serviceBehaviors>  
    </behaviors>  
  </system.serviceModel>  
</configuration>  

~\Child\Service.svc konumunda bulunan hizmet, hem serviceDebug hem de serviceMetadata davranışlarına sahipmiş gibi davranır. ~\Service.svc konumunda bulunan hizmet yalnızca serviceDebug davranışına sahip olur. Ne olur, aynı ada sahip iki davranış koleksiyonu (bu örnekte boş dize) birleştirilir.

Ayrıca clear etiketini kullanarak <> davranış koleksiyonlarını temizleyebilir ve remove etiketini kullanarak <tek tek davranışları koleksiyondan kaldırabilirsiniz>. Örneğin, aşağıdaki iki yapılandırma alt hizmetin yalnızca serviceMetadata davranışına sahip olmasına neden olur:

<configuration>  
  <system.serviceModel>  
    <behaviors>  
      <serviceBehaviors>  
        <behavior>  
          <remove name="serviceDebug"/>  
          <serviceMetadata httpGetEnabled="True" />  
        </behavior>  
      </serviceBehaviors>  
    </behaviors>  
  </system.serviceModel>  
</configuration>  
<configuration>  
  <system.serviceModel>  
    <behaviors>  
      <serviceBehaviors>  
        <behavior>  
          <clear/>  
          <serviceMetadata httpGetEnabled="True" />  
        </behavior>  
      </serviceBehaviors>  
    </behaviors>  
  </system.serviceModel>  
</configuration>  

Davranış birleştirme, yukarıda gösterildiği gibi adsız davranış koleksiyonları ve adlandırılmış davranış koleksiyonları için de gerçekleştirilir.

Davranış birleştirme, Web.config dosyalarının kök Web.config dosyası ve machine.config ile hiyerarşik olarak birleştirildiği IIS barındırma ortamında çalışır. Ancak machine.config dosyasının App.config dosyasıyla birleştirebildiği uygulama ortamında da çalışır.

Davranış birleştirme, hem uç nokta davranışları hem de yapılandırmadaki hizmet davranışları için geçerlidir.

Alt davranış koleksiyonu, üst davranış koleksiyonunda zaten var olan bir davranış içeriyorsa, alt davranış üst öğeyi geçersiz kılar. Bu nedenle, bir üst davranış koleksiyonunda <serviceMetadata httpGetEnabled="False" /> ve alt davranış koleksiyonunda varsa <serviceMetadata httpGetEnabled="True" />, alt davranış davranış davranış koleksiyonundaki üst davranışı geçersiz kılar ve httpGetEnabled "true" olur.

Ayrıca bkz.