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.
<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
. öğesindebehaviors
bulunan öğelerdenbehavior
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ırbehaviorConfiguration
sağlanmışsa, hizmete varsayılan hizmet davranışı kümesi eklenir.
<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, öğesindebindings
uygunbinding
öğe yapılandırılarak bu yapılabilir. Bu öznitelik, varsayılanları değiştirmek için kullanılan öğenin özniteliğiylebinding
aynı değername
verilmelidir. Bağlamada ad belirtilmezse veya belirtilmezsebindingConfiguration
, 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ındanname
belirtilen ortak dil çalışma zamanı (CLR) türünde uygulanan arabirimdirservice
.
<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> Öğ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.
<behaviors> Öğesi
Bu, bir hizmetin davranışlarını tanımlayan öğelere yönelik bir kapsayıcı öğesidir behavior
.
<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.
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.