Yük Dengeleme

Windows Communication Foundation (WCF) uygulamalarının kapasitesini artırmanın bir yolu, bunları yük dengeli bir sunucu grubuna dağıtarak ölçeği genişletmektir. WCF uygulamaları, Windows Ağ Yükü Dengeleme gibi yazılım yük dengeleyicileri ve donanım tabanlı yük dengeleme gereçleri dahil olmak üzere standart yük dengeleme teknikleri kullanılarak yük dengelenebilir.

Aşağıdaki bölümlerde, sistem tarafından sağlanan çeşitli bağlamalar kullanılarak oluşturulan WCF uygulamalarının yük dengelemesi konusunda dikkat edilmesi gerekenler açıklanmıştır.

Temel HTTP Bağlaması ile Yük Dengeleme

Yük dengeleme açısından bakıldığında, kullanarak BasicHttpBinding iletişim kuran WCF uygulamaları diğer yaygın HTTP ağ trafiği türlerinden (statik HTML içeriği, ASP.NET sayfaları veya ASMX Web Hizmetleri) farklı değildir. Bu bağlamayı kullanan WCF kanalları doğal olarak durum bilgisizdir ve kanal kapatıldığında bağlantılarını sonlandırır. Bu nedenle, BasicHttpBinding mevcut HTTP yük dengeleme teknikleriyle iyi çalışır.

Varsayılan olarak, BasicHttpBinding değeri olan Keep-Alive iletilere bağlantı HTTP üst bilgisi gönderir ve bu da istemcilerin bunları destekleyen hizmetlere kalıcı bağlantılar kurmasını sağlar. Daha önce kurulan bağlantılar aynı sunucuya sonraki iletileri göndermek için yeniden kullanılabilir olduğundan bu yapılandırma gelişmiş aktarım hızı sunar. Ancak, bağlantının yeniden kullanılması istemcilerin yük dengeli grup içindeki belirli bir sunucuyla güçlü bir şekilde ilişkilendirilmesine neden olabilir ve bu da hepsini bir kez deneme yük dengelemenin verimliliğini azaltır. Bu davranış istenmeyen bir davranışsa, veya kullanıcı tanımlı Bindingile CustomBinding özelliği kullanılarak KeepAliveEnabled sunucuda HTTP Keep-Alive devre dışı bırakılabilir. Aşağıdaki örnekte, yapılandırma kullanılarak bunun nasıl yapılacağını gösterilmektedir.

<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
  
 <system.serviceModel>  
  <services>  
   <service
     name="Microsoft.ServiceModel.Samples.CalculatorService"  
     behaviorConfiguration="CalculatorServiceBehavior">  
     <host>  
      <baseAddresses>  
       <add baseAddress="http://localhost:8000/servicemodelsamples/service"/>  
      </baseAddresses>  
     </host>  
    <!-- configure http endpoint, use base address provided by host  
         And the customBinding -->  
     <endpoint address=""  
           binding="customBinding"  
           bindingConfiguration="HttpBinding"
           contract="Microsoft.ServiceModel.Samples.ICalculator" />  
   </service>  
  </services>  
  
  <bindings>  
    <customBinding>  
  
    <!-- Configure a CustomBinding that disables keepAliveEnabled-->  
      <binding name="HttpBinding" keepAliveEnabled="False"/>  
  
    </customBinding>  
  </bindings>  
 </system.serviceModel>  
</configuration>  

.NET Framework 4'te sunulan basitleştirilmiş yapılandırma kullanılarak, aynı davranış aşağıdaki basitleştirilmiş yapılandırma kullanılarak gerçekleştirilebilir.

<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
 <system.serviceModel>  
    <protocolMapping>  
      <add scheme="http" binding="customBinding" />  
    </protocolMapping>  
    <bindings>  
      <customBinding>  
  
      <!-- Configure a CustomBinding that disables keepAliveEnabled-->  
        <binding keepAliveEnabled="False"/>  
  
      </customBinding>  
    </bindings>  
 </system.serviceModel>  
</configuration>  

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.

WSHttp Bağlama ve WSDualHttp Bağlama ile Yük Dengeleme

WSHttpBinding Hem hem deWSDualHttpBinding, varsayılan bağlama yapılandırmasında çeşitli değişiklikler yapılması koşuluyla HTTP yük dengeleme teknikleri kullanılarak yük dengelenebilir.

  • Güvenlik Bağlamı Oluşturma özelliğini kapatın veya durum bilgisi olan güvenlik oturumlarını kullanın. Güvenlik Bağlamı Oluşturma özelliği olarak ayarlanarak EstablishSecurityContextWSHttpBindingfalsekapatılabilir. Kullanıyorsanız WSDualHttpBinding veya güvenlik oturumları gerekiyorsa, Güvenli Oturumlar'da açıklandığı gibi durum bilgisi olan güvenlik oturumlarını kullanabilirsiniz. Durum bilgisi olan güvenlik oturumları, güvenlik oturumunun tüm durumu koruma güvenlik belirtecinin bir parçası olarak her istekle birlikte iletildiğinden hizmetin durum bilgisi olmayan kalmasını sağlar. Durum bilgisi olan bir güvenlik oturumunu etkinleştirmek için, sistem tarafından sağlanan WSHttpBinding ve WSDualHttpBindingüzerinde gerekli yapılandırma ayarları gösterilmediğinden veya kullanıcı tanımlı Bindingbir CustomBinding kullanmanız gerekir.

  • Güvenlik Bağlamı Oluşturma'yı kapatırsanız, Hizmet Kimlik Bilgisi Anlaşması'nın da kapatılması gerekir. Kapatmak için özelliğini olarak ayarlayın NegotiateServiceCredentialWSHttpBindingfalse. Hizmet Kimlik Bilgisi Anlaşması'nı devre dışı bırakmak için istemcide uç nokta kimliğini açıkça belirtmeniz gerekebilir.

  • Güvenilir oturumlar kullanmayın. Bu özellik varsayılan olarak kapalıdır.

Net.TCP Bağlamasını Yük Dengeleme

, NetTcpBinding IP katmanı yük dengeleme teknikleri kullanılarak yük dengelenebilir. Ancak, NetTcpBinding bağlantı gecikme süresini azaltmak için TCP bağlantılarını varsayılan olarak havuzlar. Bu, temel yük dengeleme mekanizmasını engelleyen bir iyileştirmedir. en iyi duruma getirmek NetTcpBinding için birincil yapılandırma değeri, Bağlan ion Havuzu Ayarlar parçası olan kira zaman aşımıdır. Bağlan ion havuzu, istemci bağlantılarının gruptaki belirli sunucularla ilişkilendirilmesine neden olur. Bu bağlantıların kullanım ömrü arttıkça (kira zaman aşımı ayarı tarafından denetlenen bir faktör), gruptaki çeşitli sunucular arasında yük dağılımı dengesiz hale gelir. Sonuç olarak ortalama çağrı süresi artar. Bu nedenle, yük dengeli senaryolarda kullanırken NetTcpBinding bağlama tarafından kullanılan varsayılan kira zaman aşımını azaltmayı göz önünde bulundurun. En uygun değer uygulamaya bağımlı olsa da, 30 saniyelik kira zaman aşımı, yük dengeli senaryolar için makul bir başlangıç noktasıdır. Kanal kiralama zaman aşımı ve diğer aktarım kotaları hakkında daha fazla bilgi için bkz . Aktarım Kotaları.

Yük dengeli senaryolarda en iyi performans için (Transportveya TransportWithMessageCredential) kullanmayı NetTcpSecurity göz önünde bulundurun.

Ayrıca bkz.