WCF - Hizmet Bağlama

WCF hizmet bağlama, her bir öğenin hizmetin istemciyle iletişim kurma şeklini tanımladığı birkaç öğeden oluşan bir kümedir. Bir taşıma öğesi ve bir mesaj kodlama öğesi, her bir bağlantının en önemli iki bileşenidir. Bu bölümde, yaygın olarak kullanılan çeşitli WCF hizmet bağlamalarını tartışacağız.

Temel Ciltleme

Temel bağlama, BasicHttpBinding sınıfı tarafından sunulur. Bir WCF hizmetini bir ASP.NET web hizmeti (ASMX web hizmeti) olarak taşımak ve temsil etmek için HTTP protokolünü kullanır, böylece ASMX web hizmetlerini kullanan eski istemciler yeni hizmetleri rahatlıkla kullanabilir.

Temel bağlama, Silverlight tarafından etkinleştirilen bir WCF web hizmetinde varsayılan bağlama olarak ayarlanır ve web hizmeti stilindeki iletişimler için standart bir bağlamadır. Güvenilir mesajlaşmayı desteklemez.

Aşağıda, temel bağlama için varsayılan ayarları gösteren bir kod parçası verilmiştir.

<basicHttpBinding>
   <binding name = "basicHttpBindingDefaults" allowCookies = "false" 
      bypassProxyOnLocal = "false" hostNameComparisonMode = "StrongWildcard" 
      maxBufferPoolSize = "524288" maxBufferSize = "65536" 
      maxReceivedMessageSize = "65536" messageEncoding = "Text" proxyAddress = "" 
      textEncoding = "utf-8" transferMode = "Buffer" useDefaultWebProxy = "true" 
      closeTimeout = "00:01:00" openTimeout = "00:01:00" receiveTimeout = "00:10:00" 
      sendTimeout = "00:01:00">
   
      <readerQuotas maxArrayLength = "16384" maxBytesPerRead = "4096" 
         maxDepth = "32"
         maxNameTableCharCount = "16384" maxStringContentLength = "8192"/>

      <security mode = "None">
         <transport clientCredentialType = "None" proxyCredentialType = "None" realm = ""/>
         <message algorithmSuite = "Basic256" clientCredentialType = "UserName" />
      </security>       
   </binding>

</basicHttpBinding>

Mesaj boyutu sınırlı olduğundan ve güvenlik modu olmadığından, yukarıdaki varsayılan ayarların belirgin sınırlamaları vardır. Bununla birlikte, temel bağlamanın özelleştirilmesi, bu sorunu aşağıdaki gibi çözer.

<basicHttpBinding>
   <binding name = "basicHttpSecure" maxBufferSize = "100000" maxReceivedMessageSize = "100000">
   
      <readerQuotas maxArrayLength = "100000" maxStringContentLength = "100000"/>
      <security mode = "TransportWithMessageCredential" />
     
   </binding>
</basicHttpBinding>

Web Hizmeti Bağlama

Web Hizmeti (WS) bağlama, WSHttpBinding sınıfı tarafından sağlanır. Temel bağlamaya oldukça benzer ve taşıma için aynı protokolleri kullanır, ancak WS – Güvenilir Mesajlaşma, WS – İşlemler, WS – Güvenlik ve çok daha fazlası gibi çeşitli WS– * özellikleri sunar. Özetle WSHttpBinding, basicHttpBinding ve WS– * belirtimlerinin toplamına eşittir. Aşağıda, WS Bağlama için varsayılan ayarları gösteren bir kod parçası verilmiştir -

<wsHttpBinding>
   <binding name = "wsHttpBindingDefaults" allowCookies = "false" 
      bypassProxyOnLocal = "false" closeTimeout = "00:01:00" 
      hostNameComparisonMode = "StrongWildcard" 
      maxBufferPoolSize = "524288" maxReceivedMessageSize = "65536" 
      messageEncoding = "Text" openTimeout = "00:01:00" 
      receiveTimeout = "00:10:00" proxyAddress = "" sendTimeout = "00:01:00" 
      textEncoding = "utf-8" transactionFlow = "false" 
      useDefaultWebProxy = "true" > 
   
      <readerQuotas maxArrayLength = "16384" maxBytesPerRead = ."4096" 
         maxDepth = "32" maxNameTableCharCount = "16384" 
         maxStringContentLength = "8192"/>

      <reliableSession enabled = "false" ordered = "true" 
         inactivityTimeout = "oo:10:00" /> 

      <security mode = "Message">
         <message algorithmSuite = "Basic256" clientCredentialType = "Windows" 
            esatalishSecurityContext = "true" 
            negotiateServiceCredential = "true" />

         <transport clientCredentialType = "Windows"
            proxyCredentialType = "None" realm = ""/>        	
      </security>
      
   </binding>
</wsHttpBinding>

IPC Bağlama

IPC bağlama, adlandırılmış kanaldan yararlanır ve netNamedPipeBinding sınıfı tarafından sunulur. Bu, mevcut tüm bağlamaların arasında en hızlı ve en güvenli olanıdır. Burada ileti düzeyinde güvenlik desteklenmese de, sağlam bir aktarım güvenliği nedeniyle iletiler varsayılan olarak güvenlidir. Aşağıda, IPC bağlama için varsayılan ayarları gösteren kod parçacığı verilmiştir -

<netNamedPipeBinding>
   
   <binding name = "netPipeDefaults" closeTimeout = "00:01:00" 
      hostNameComparisonMode = "StrongWildcard" maxBufferPoolSize = "524288" 
      maxBufferSize = "65536" maxConnections = "10" 
      maxReceivedMessageSize = "65536" openTimeout = "00:01:00" 
      receiveTimeout = "00:10:00" sendTimeout = "00:01:00" transactionFlow = "false" 
      transactionProtocol = "OleTransactions" transferMode = "Buffered">  

      <readerQuotas maxArrayLength = "16384" maxBytesPerRead = "4096" 
         maxDepth = "32" maxNameTableCharCount = "16384" 
         maxStringContentLength = "8192"/>
   
      <security mode = "Transport">        	
      </security>
      
   </binding>
</netNamedPipeBinding>

Diğer Hizmet Bağlama Türleri

  • TCP Binding- NetTCPBinding sınıfı tarafından sağlanan bu bağlanma, aynı ağ içindeki iletişim için TCP protokolünü kullanır ve mesaj kodlamasını ikili biçimde yapar. Bu bağlanma, diğerlerinin aksine en güvenilir olarak kabul edilir.

  • WS Dual Binding- Bu tür bir bağlama, çift yönlü iletişimi kolaylaştırması dışında WSHttpBinding'e daha çok benzer, yani mesajlar hem istemciler hem de hizmetler tarafından gönderilebilir ve alınabilir. WSDualHttpBinding sınıfı tarafından sunulur.

  • Web binding - Web bağlama, HTTP-GET, HTTP-POST, vb. Kullanımıyla WCF hizmetlerini HTTP istekleri biçiminde temsil etmek üzere tasarlanmıştır. WebHttpBinding sınıfı tarafından sunulur ve sosyal ağlarda yaygın olarak kullanılır.

  • MSMQ Binding- NetMsmqBinding sınıfı tarafından sunulur ve hizmetin bir mesajı istemci tarafından gönderilenden farklı bir zamanda işlemesi durumunda çözümler sağlamak için kullanılır. MSMQ bağlama, taşıma için MSMQ'dan yararlanır ve kuyruğa alınmış ayrılmış mesajlara destek sağlar. MSMQ, Microsoft tarafından sunulan bir ileti kuyruğu uygulamasıdır.

  • Federated WS Binding- Belirli bir WS bağlama biçimidir ve federe güvenlik için destek sunar. WSFederationHttpBinding sınıfı tarafından sunulur.

  • Peer Network Binding- NetPeerTCPBinding sınıfı tarafından sunulur, esas olarak dosya paylaşım sistemlerinde kullanılır. TCP protokolünü kullanır, ancak aktarım olarak eş ağ iletişimi kullanır. Bu ağda, her makine (düğüm) bir istemci ve diğer düğümler için bir sunucu görevi görür. Eş ağ bağlama, torrent gibi dosya paylaşım sistemlerinde kullanılır.

  • MSMQ Integration Binding - MsmqIntegrationBinding sınıfı tarafından sunulur, MSMQ (Microsoft Message Queuing) aracılığıyla iletişim kuran mevcut sistemlerle iletişim kurmaya yardımcı olur.

Bunların dışında özel ciltlemeler oluşturmak da mümkündür. Ancak, her bir WCF bağlamasının konfigürasyon özelliklerini değiştirmek mümkün olduğundan, özel bağlamalar oluşturma ihtiyacı nadiren ortaya çıkar.