Windows Communication Foundation Hizmetleri için Bağlamaları Yapılandırma

Uygulama oluştururken, genellikle uygulamanın dağıtımından sonra kararları yöneticiye ertelemek istersiniz. Örneğin, genellikle bir hizmet adresinin veya Tekdüzen Kaynak Tanımlayıcısı'nın (URI) ne olacağını önceden bilmenin bir yolu yoktur. Bir adresi sabit kodlamak yerine, bir yöneticinin hizmet oluşturduktan sonra bunu gerçekleştirmesine izin vermek tercih edilir. Bu esneklik yapılandırma yoluyla gerçekleştirilir.

Ana Bölümler

Windows Communication Foundation (WCF) yapılandırma şeması aşağıdaki üç ana bölümü (serviceModel, bindingsve services) içerir:

<configuration>  
    <system.serviceModel>  
        <bindings>  
        </bindings>  
        <services>  
        </services>  
        <behaviors>  
        </behaviors>  
    </system.serviceModel>  
</configuration>  

ServiceModel Öğeleri

Bir hizmet türünü bir veya daha fazla uç noktayla yapılandırmak için öğesinin system.ServiceModel sınırladığı bölümü ve bir hizmetin ayarlarını kullanabilirsiniz. Ardından her uç nokta bir adres, sözleşme ve bağlama ile yapılandırılabilir. Uç noktalar hakkında daha fazla bilgi için bkz . Uç Nokta Oluşturmaya Genel Bakış. Hiçbir uç nokta belirtilmezse, ç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.

Bağlama aktarımları (HTTP, TCP, kanallar, Message Queuing) ve protokolleri (Güvenlik, Güvenilirlik, İşlem akışları) belirtir ve her biri bir uç noktanın dünyayla iletişim kurma şeklinin bir yönünü belirten bağlama öğelerinden oluşur.

Örneğin, temelHttpBinding> öğesinin <belirtilmesi, uç nokta için aktarım olarak HTTP'nin kullanılacağını gösterir. Bu, bu uç noktayı kullanan hizmet açıldığında çalışma zamanında uç noktayı aramak için kullanılır.

İki tür bağlama vardır: önceden tanımlanmış ve özel. Önceden tanımlanmış bağlamalar, yaygın senaryolarda kullanılan öğelerin kullanışlı birleşimlerini içerir. WCF'nin sağladığı önceden tanımlanmış bağlama türlerinin listesi için bkz . Sistem Tarafından Sağlanan Bağlamalar. Önceden tanımlanmış bağlama koleksiyonu, bir hizmet uygulamasının ihtiyaç duyduğu özelliklerin doğru birleşimine sahip değilse, uygulamanın gereksinimlerini karşılamak için özel bağlamalar oluşturabilirsiniz. Özel bağlamalar hakkında daha fazla bilgi için bkz <. customBinding>.

Aşağıdaki dört örnek, WCF hizmetini ayarlamak için kullanılan en yaygın bağlama yapılandırmalarını göstermektedir.

Bağlama Türü Kullanmak için Uç Nokta Belirtme

İlk örnekte adres, sözleşme ve bağlama ile yapılandırılmış bir uç noktanın nasıl belirtilmesi gösterilmektedir.

<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">  
  <!-- This section is optional with the default configuration introduced  
       in .NET Framework 4. -->  
  <endpoint
      address="/HelloWorld2/"  
      contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"  
      binding="basicHttpBinding" />
</service>  

Bu örnekte, özniteliği yapılandırmanın name hangi hizmet türü için olduğunu gösterir. Sözleşmeyle HelloWorld kodunuzda bir hizmet oluşturduğunuzda, örnek yapılandırmada tanımlanan tüm uç noktalarla başlatılır. Derleme yalnızca bir hizmet sözleşmesi uygularsa, name hizmet kullanılabilir tek türü kullandığından özniteliği atlanabilir. özniteliği biçiminde olması gereken bir dize alır Namespace.Class, AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

özniteliği, address diğer uç noktaların hizmetle iletişim kurmak için kullandığı URI'yi belirtir. URI mutlak veya göreli bir yol olabilir. Göreli bir adres sağlanırsa, konağın bağlamada kullanılan aktarım düzenine uygun bir temel adres sağlaması beklenir. Bir adres yapılandırılmamışsa, temel adresin bu uç noktanın adresi olduğu varsayılır.

contract özniteliği, bu uç noktanın ortaya çıkarmakta olduğu sözleşmeyi belirtir. Hizmet uygulama türü, sözleşme türünü uygulamalıdır. Bir hizmet uygulaması tek bir sözleşme türü uygularsa, bu özellik atlanabilir.

özniteliği, binding bu özel uç nokta için kullanılacak önceden tanımlanmış veya özel bir bağlama seçer. Bağlamayı açıkça seçmeyen uç nokta varsayılan bağlama seçimini kullanır.BasicHttpBinding

Önceden Tanımlanmış Bağlamayı Değiştirme

Aşağıdaki örnekte, önceden tanımlanmış bir bağlama değiştirilmiştir. Daha sonra hizmetteki herhangi bir uç noktayı yapılandırmak için kullanılabilir. Bağlama değeri 1 saniye olarak ayarlanarak ReceiveTimeout değiştirilir. özelliğinin bir TimeSpan nesne döndürdüğünü unutmayın.

Bu değiştirilen bağlama, bağlamalar bölümünde bulunur. Bu değiştirilen bağlama artık öğesinde endpoint özniteliği ayarlanarak binding herhangi bir uç nokta oluşturulurken kullanılabilir.

Not

Bağlamaya belirli bir ad verirseniz, bindingConfiguration hizmet uç noktasında belirtilen ad ile eşleşmesi gerekir.

<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">  
  <endpoint
      address="/HelloWorld2/"  
      contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"  
      binding="basicHttpBinding" />
</service>  
<bindings>  
    <basicHttpBinding
        receiveTimeout="00:00:01"  
    />  
</bindings>  

Bir Hizmete Uygulanacak Davranışı Yapılandırma

Aşağıdaki örnekte, hizmet türü için belirli bir davranış yapılandırılır. ServiceMetadataBehavior öğesi, Hizmeti sorgulamak ve meta verilerden Web Hizmetleri Açıklama Dili (WSDL) belgeleri oluşturmak için ServiceModel Meta Veri Yardımcı Programı Aracı'nı (Svcutil.exe) etkinleştirmek için kullanılır.

Not

Davranışa belirli bir ad verirseniz, behaviorConfiguration hizmet veya uç nokta bölümünde belirtilen adla eşleşmesi gerekir.

<behaviors>  
    <behavior>  
        <ServiceMetadata httpGetEnabled="true" />
    </behavior>  
</behaviors>  
<services>  
    <service
       name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
       <endpoint
          address="http://computer:8080/Hello"  
          contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"  
          binding="basicHttpBinding" />
    </service>  
</services>  

Yukarıdaki yapılandırma, bir istemcinin "HelloWorld" türündeki hizmetin meta verilerini çağırmasına ve almasına olanak tanır.

svcutil /config:Client.exe.config http://computer:8080/Hello?wsdl

Farklı Bağlama Değerleri Kullanarak İki Uç Noktalı Bir Hizmet Belirtme

Bu son örnekte, hizmet türü için HelloWorld iki uç nokta yapılandırılır. Her uç nokta aynı bağlama türünde farklı bir özelleştirilmiş bindingConfiguration öznitelik kullanır (her biri öğesini basicHttpBindingdeğiştirir).

<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">  
    <endpoint  
        address="http://computer:8080/Hello1"  
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"  
        binding="basicHttpBinding"  
        bindingConfiguration="shortTimeout" />
    <endpoint  
        address="http://computer:8080/Hello2"  
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"  
        binding="basicHttpBinding"  
        bindingConfiguration="Secure" />
</service>  
<bindings>  
    <basicHttpBinding
        name="shortTimeout"  
        timeout="00:00:00:01"
     />  
     <basicHttpBinding
        name="Secure">  
        <Security mode="Transport" />  
     </basicHttpBinding>
</bindings>  

Bir bölüm ekleyerek protocolMapping ve bağlamaları aşağıdaki örnekte gösterildiği gibi yapılandırarak varsayılan yapılandırmayı kullanarak aynı davranışı elde edebilirsiniz.

<protocolMapping>  
    <add scheme="http" binding="basicHttpBinding" bindingConfiguration="shortTimeout" />  
    <add scheme="https" binding="basicHttpBinding" bindingConfiguration="Secure" />  
</protocolMapping>  
<bindings>  
    <basicHttpBinding
        name="shortTimeout"  
        timeout="00:00:00:01"
     />  
     <basicHttpBinding
        name="Secure" />  
        <Security mode="Transport" />  
</bindings>  

Ayrıca bkz.