Aracılığıyla paylaş


Windows Communication Foundation Services 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.

Uyarı

Yapılandırma dosyalarını hızlı bir şekilde oluşturmak için (Svcutil.exe) ServiceModel Meta Veri Yardımcı Programı Aracı'nı, /config anahtarıyla kullanın.

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 ve bir hizmetin ayarlarıyla yapılandırmak için system.ServiceModel öğesiyle sınırlanan bölümden yararlanabilirsiniz. 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, uç noktayı kullanan hizmet açıldığında çalışma zamanında uç noktayı bağlamak 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. System-Provided 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. Öznitelik, Namespace.Class, AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null biçiminde olması gereken bir dize alır.

ö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, ana bilgisayarın bağlamada kullanılan taşıma sistemi için 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, ReceiveTimeout değerini 1 saniye olarak ayarlayarak 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. Şimdi, değiştirilmiş bu bağlama, binding öğesindeki endpoint özniteliğini ayarlayarak herhangi bir uç nokta oluşturulurken kullanılabilir.

Uyarı

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.

Uyarı

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 bir uç nokta aynı bağlama türünün özelleştirilmiş farklı bir bindingConfiguration özniteliğini kullanır (her biri basicHttpBinding öğesini değ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 bakınız