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.
Not
Yapılandırma dosyalarını hızlı bir şekilde oluşturmak için anahtarla ServiceModel Meta Veri Yardımcı Programı Aracı'nı /config
(Svcutil.exe) kullanın.
Ana Bölümler
Windows Communication Foundation (WCF) yapılandırma şeması aşağıdaki üç ana bölümü (serviceModel
, bindings
ve 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 basicHttpBinding
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>