Basitleştirilmiş Yapılandırma

Windows Communication Foundation (WCF) hizmetlerini yapılandırmak karmaşık bir görev olabilir. Birçok farklı seçenek vardır ve hangi ayarların gerekli olduğunu belirlemek her zaman kolay değildir. Yapılandırma dosyaları WCF hizmetlerinin esnekliğini artırsa da, birçok zor sorunun kaynağı da bunlardır. .NET Framework 4.6.1 bu sorunları giderir ve hizmet yapılandırmasının boyutunu ve karmaşıklığını azaltmanın bir yolunu sağlar.

Basitleştirilmiş Yapılandırma

WCF hizmet yapılandırma dosyalarında, bölümünde barındırılan <system.serviceModel> her hizmet için bir <service> öğe bulunur. öğesi, <service> her hizmet için kullanıma sunulan uç noktaları ve isteğe bağlı olarak bir hizmet davranışı kümesini belirten bir öğe koleksiyonu <endpoint> içerir. <endpoint> Öğeler, uç nokta tarafından kullanıma sunulan adresi, bağlamayı ve sözleşmeyi belirtir ve isteğe bağlı olarak yapılandırma ve uç nokta davranışlarını bağlar. <system.serviceModel> bölümü ayrıca hizmet veya uç nokta davranışlarını belirtmenize olanak tanıyan bir <behaviors> öğe içerir. Aşağıdaki örnekte bir yapılandırma dosyasının <system.serviceModel> bölümü gösterilmektedir.

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="MyServiceBehavior">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="false" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <bindings>
   <basicHttpBinding>
      <binding name=MyBindingConfig"
               maxBufferSize="100"
               maxReceiveBufferSize="100" />
   </basicHttpBinding>
   </bindings>   <services>
    <service behaviorConfiguration="MyServiceBehavior"
             name="MyService">
      <endpoint address=""
                binding="basicHttpBinding"
                contract="ICalculator"
                bindingConfiguration="MyBindingConfig" />
      <endpoint address="mex"
                binding="mexHttpBinding"
                contract="IMetadataExchange"/>
    </service>
  </services>
</system.serviceModel>

.NET Framework 4.6.1, öğenin gereksinimini kaldırarak WCF hizmetini yapılandırmayı <service> kolaylaştırır. Bölüm eklemezseniz <service> veya bir bölüme uç nokta eklemezseniz ve hizmetiniz herhangi bir <service> uç noktayı program aracılığıyla tanımlamazsa, hizmetinize her hizmet temel adresi ve hizmetiniz tarafından uygulanan her sözleşme için bir tane olmak üzere bir dizi varsayılan uç nokta otomatik olarak eklenir. Bu uç noktaların her birinde uç nokta adresi temel adrese karşılık gelir, bağlama temel adres düzeni tarafından belirlenir ve sözleşme hizmetiniz tarafından uygulanan adrestir. Herhangi bir uç nokta veya hizmet davranışı belirtmeniz veya bağlama ayarı değişiklikleri yapmanız gerekmiyorsa, bir hizmet yapılandırma dosyası belirtmeniz gerekmez. Bir hizmet iki sözleşme uygularsa ve konak hem HTTP hem de TCP aktarımlarını etkinleştirirse, hizmet konağı her taşımayı kullanan her sözleşme için bir tane olmak üzere dört varsayılan uç nokta oluşturur. Varsayılan uç noktalar oluşturmak için hizmet konağı hangi bağlamaların kullanılacağını bilmelidir. Bu ayarlar bölümün içindeki <system.serviceModel> bir <protocolMappings> bölümde belirtilir. bölümü, <protocolMappings> bağlama türlerine eşlenen aktarım protokolü düzenlerinin listesini içerir. Hizmet konağı, hangi bağlamanın kullanılacağını belirlemek için ona geçirilen temel adresleri kullanır. Aşağıdaki örnekte öğesi kullanılmaktadır <protocolMappings> .

Uyarı

Bağlamalar veya davranışlar gibi varsayılan yapılandırma öğelerinin değiştirilmesi, yapılandırma hiyerarşisinin alt düzeylerinde tanımlanan hizmetleri etkileyebilir, çünkü bu varsayılan bağlamaları ve davranışları kullanıyor olabilirler. Bu nedenle, varsayılan bağlamaları ve davranışları kim değiştirirse değiştirsin, bu değişikliklerin hiyerarşideki diğer hizmetleri etkileyebileceğini bilmesi gerekir.

Not

Internet Information Services (IIS) veya Windows İşlem Etkinleştirme Hizmeti (WAS) altında barındırılan hizmetler, temel adresleri olarak sanal dizini kullanır.

<protocolMapping>
  <add scheme="http"     binding="basicHttpBinding" bindingConfiguration="MyBindingConfig"/>
  <add scheme="net.tcp"  binding="netTcpBinding"/>
  <add scheme="net.pipe" binding="netNamedPipeBinding"/>
  <add scheme="net.msmq" binding="netMSMQBinding"/>
</protocolMapping>

Önceki örnekte, temel adresi "http" düzeniyle başlayan bir uç nokta kullanır BasicHttpBinding. "net.tcp" düzeniyle başlayan temel adrese sahip bir uç nokta kullanır NetTcpBinding. Yerel app.config veya Web.config dosyasındaki ayarları geçersiz kılabilirsiniz.

Bölümün içindeki <protocolMappings> her öğe bir düzen ve bağlama belirtmelidir. İsteğe bağlı olarak, yapılandırma dosyasının bölümünde bağlama yapılandırmasını <bindings> belirten bir öznitelik belirtebilirbindingConfiguration. Belirtilmezse bindingConfiguration , uygun bağlama türünün anonim bağlama yapılandırması kullanılır.

Hizmet davranışları, bölümler içindeki <serviceBehaviors> anonim <behavior> bölümler kullanılarak varsayılan uç noktalar için yapılandırılır. içindeki <serviceBehaviors> adlandırılmamış <behavior> öğeler hizmet davranışlarını yapılandırmak için kullanılır. Örneğin, aşağıdaki yapılandırma dosyası konaktaki tüm hizmetler için hizmet meta verileri yayımlamayı etkinleştirir.

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>    <!-- No <service> tag is necessary. Default endpoints are added to the service -->
    <!-- The service behavior with name="" is picked up by the service -->
 </system.serviceModel>

Uç nokta davranışları, bölümler içindeki <serviceBehaviors> anonim <behavior> bölümler kullanılarak yapılandırılır.

Aşağıdaki örnek, basitleştirilmiş yapılandırma modelini kullanan bu konunun başındakine eşdeğer bir yapılandırma dosyasıdır.

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
       <basicHttpBinding>
          <binding maxBufferSize="100"
                   maxReceiveBufferSize="100" />
       </basicHttpBinding>
    </bindings>
    <!-- No <service> tag is necessary. Default endpoints will be added to the service -->
    <!-- The service behavior with name="" will be picked up by the service -->
    <protocolMapping>
      <add scheme="http" binding="basicHttpBinding" />
  </protocolMapping>
  </system.serviceModel>

Önemli

Bu özellik istemci yapılandırmasıyla değil yalnızca WCF hizmet yapılandırmasıyla ilgilidir. Çoğu zaman, WCF istemci yapılandırması svcutil.exe veya Visual Studio'dan hizmet başvurusu ekleme gibi bir araç tarafından oluşturulur. Bir WCF istemcisini el ile yapılandırıyorsanız, yapılandırmaya bir <istemci> öğesi eklemeniz ve çağırmak istediğiniz uç noktaları belirtmeniz gerekir.

Ayrıca bkz.