WCF - Liaison de service

La liaison de service WCF est un ensemble de plusieurs éléments dans lesquels chaque élément définit la façon dont le service communique avec le client. Un élément de transport et un élément de codage de message sont les deux composants les plus vitaux de chaque liaison. Dans ce chapitre, nous aborderons diverses liaisons de service WCF couramment utilisées.

Reliure de base

La liaison de base est offerte par la classe BasicHttpBinding. Il utilise le protocole HTTP pour transporter et représenter un service WCF en tant que service Web ASP.NET (service Web ASMX), afin que les anciens clients qui utilisent les services Web ASMX puissent utiliser les nouveaux services de manière pratique.

La liaison de base est définie comme liaison par défaut dans un service Web WCF activé par Silverlight et est une liaison standard pour les communications dans le style de service Web. Il ne prend pas en charge la messagerie fiable.

Vous trouverez ci-dessous un extrait de code décrivant les paramètres par défaut pour la liaison de base.

<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>

Les paramètres par défaut ci-dessus ont leurs limites évidentes, car la taille du message est limitée et il n'y a pas de mode de sécurité. Cependant, la personnalisation de la liaison de base résout ce problème comme celui ci-dessous.

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

Liaison de service Web

La liaison de service Web (WS) est fournie par la classe WSHttpBinding. Il est assez similaire à la liaison de base et utilise les mêmes protocoles pour le transport, mais offre plusieurs spécifications WS– * telles que WS – Reliable Messaging, WS – Transactions, WS – Security et bien d'autres. En un mot, WSHttpBinding est égal à la somme des spécifications basicHttpBinding et WS– *. Vous trouverez ci-dessous un extrait de code représentant les paramètres par défaut de WS Binding -

<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>

Liaison IPC

La liaison IPC utilise le canal nommé et est proposée par la classe netNamedPipeBinding. Il s'agit de la liaison la plus rapide et la plus sécurisée parmi toutes les liaisons disponibles. Bien que la sécurité au niveau des messages ne soit pas prise en charge ici, les messages sont sécurisés par défaut en raison d'une sécurité de transport robuste. Vous trouverez ci-dessous l'extrait de code représentant les paramètres par défaut pour la liaison IPC -

<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>

Autres types de liaisons de service

  • TCP Binding- Fournie par la classe NetTCPBinding, cette liaison utilise le protocole TCP pour la communication au sein du même réseau et effectue le codage des messages au format binaire. Cette liaison est considérée comme la plus fiable contrairement aux autres.

  • WS Dual Binding- Ce type de liaison ressemble plus à WSHttpBinding à la seule exception qu'il facilite la communication bidirectionnelle, c'est-à-dire que les messages peuvent être envoyés et reçus à la fois par les clients et les services. Il est proposé par la classe WSDualHttpBinding.

  • Web binding - La liaison Web est conçue pour représenter les services WCF sous forme de requêtes HTTP par l'utilisation de HTTP-GET, HTTP-POST, etc. Elle est proposée par la classe WebHttpBinding et est couramment utilisée avec les réseaux sociaux.

  • MSMQ Binding- Il est proposé par la classe NetMsmqBinding et est utilisé pour fournir des solutions au cas où le service traite un message à un moment différent de celui envoyé par le client. La liaison MSMQ utilise MSMQ pour le transport et prend en charge les messages détachés en file d'attente. MSMQ est une implémentation de la mise en file d'attente des messages proposée par Microsoft.

  • Federated WS Binding- Il s'agit d'une forme spécifique de liaison WS et offre une prise en charge de la sécurité fédérée. Il est proposé par la classe WSFederationHttpBinding.

  • Peer Network Binding- Offert par la classe NetPeerTCPBinding, il est principalement utilisé dans les systèmes de partage de fichiers. Il utilise le protocole TCP mais utilise la mise en réseau des pairs comme transport. Dans ce réseau, chaque machine (nœud) agit comme un client et un serveur pour les autres nœuds. La liaison de réseau homologue est utilisée dans les systèmes de partage de fichiers tels que torrent.

  • MSMQ Integration Binding - Offert par la classe MsmqIntegrationBinding, il permet de communiquer avec les systèmes existants qui communiquent via MSMQ (Microsoft Message Queuing).

En dehors de ceux-ci, il est également possible de créer des liaisons personnalisées. Toutefois, comme il est possible de modifier les propriétés de configuration de chaque liaison WCF, la nécessité de créer des liaisons personnalisées se pose rarement.