WCF - Associazione del servizio

L'associazione del servizio WCF è un insieme di diversi elementi in cui ogni elemento definisce il modo in cui il servizio comunica con il client. Un elemento di trasporto e un elemento di codifica del messaggio sono i due componenti più vitali di ogni associazione. In questo capitolo verranno illustrate le varie associazioni di servizi WCF comunemente utilizzate.

Rilegatura di base

L'associazione di base è offerta dalla classe BasicHttpBinding. Utilizza il protocollo HTTP per trasportare e rappresentare un servizio WCF come un servizio Web ASP.NET (servizio Web ASMX), in modo che i vecchi client che utilizzano i servizi Web ASMX possano utilizzare comodamente i nuovi servizi.

L'associazione di base è impostata come associazione predefinita in un servizio Web WCF abilitato da Silverlight ed è un'associazione standard per le comunicazioni in stile servizio Web. Non supporta la messaggistica affidabile.

Di seguito è riportato uno snippet di codice che illustra le impostazioni predefinite per l'associazione di 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>

Le impostazioni predefinite sopra hanno i loro limiti evidenti, poiché la dimensione del messaggio è limitata e non esiste una modalità di sicurezza. Tuttavia, la personalizzazione dell'associazione di base risolve questo problema come quello di seguito.

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

Associazione al servizio Web

Il binding del servizio Web (WS) viene fornito dalla classe WSHttpBinding. È abbastanza simile all'associazione di base e utilizza gli stessi protocolli per il trasporto, ma offre diverse specifiche WS– * come WS – Reliable Messaging, WS – Transactions, WS – Security e molte altre. In poche parole, WSHttpBinding è uguale alla somma delle specifiche basicHttpBinding e WS– *. Di seguito è riportato uno snippet di codice che rappresenta le impostazioni predefinite per 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>

Associazione IPC

L'associazione IPC utilizza la pipe denominata ed è offerta dalla classe netNamedPipeBinding. Questo è il binding più veloce e il più sicuro tra tutti i binding disponibili. Sebbene la sicurezza a livello di messaggio non sia supportata qui, i messaggi sono protetti per impostazione predefinita grazie a una solida sicurezza del trasporto. Di seguito è riportato lo snippet di codice che rappresenta le impostazioni predefinite per l'associazione 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>

Altri tipi di binding di servizio

  • TCP Binding- Fornito dalla classe NetTCPBinding, questo binding fa uso del protocollo TCP per la comunicazione all'interno della stessa rete e fa la codifica del messaggio in formato binario. Questo legame è considerato il più affidabile rispetto ad altri.

  • WS Dual Binding- Questo tipo di associazione è più simile a WSHttpBinding con l'unica eccezione che facilita la comunicazione bidirezionale, ovvero i messaggi possono essere inviati e ricevuti sia dai client che dai servizi. È offerto dalla classe WSDualHttpBinding.

  • Web binding - Il web binding è progettato per rappresentare i servizi WCF sotto forma di richieste HTTP mediante l'uso di HTTP-GET, HTTP-POST, ecc. È offerto dalla classe WebHttpBinding ed è comunemente usato con i social network.

  • MSMQ Binding- È offerto dalla classe NetMsmqBinding e viene utilizzato per fornire soluzioni nel caso in cui il servizio elabori un messaggio in un momento diverso da quello inviato dal client. L'associazione MSMQ utilizza MSMQ per il trasporto e fornisce supporto ai messaggi scollegati in coda. MSMQ è un'implementazione per l'accodamento dei messaggi offerto da Microsoft.

  • Federated WS Binding- È una forma specifica di associazione WS e offre supporto per la sicurezza federata. È offerto dalla classe WSFederationHttpBinding.

  • Peer Network Binding- Offerto dalla classe NetPeerTCPBinding, viene utilizzato principalmente nei sistemi di condivisione di file. Utilizza il protocollo TCP ma utilizza il peer networking come trasporto. In questa rete, ogni macchina (nodo) funge da client e da server per gli altri nodi. Il binding di rete peer viene utilizzato nei sistemi di condivisione di file come torrent.

  • MSMQ Integration Binding - Offerto dalla classe MsmqIntegrationBinding, aiuta a comunicare con i sistemi esistenti che comunicano tramite MSMQ (Microsoft Message Queuing).

Oltre a questi, è anche possibile creare associazioni personalizzate. Tuttavia, poiché è possibile modificare le proprietà di configurazione di ogni associazione WCF, la necessità di creare associazioni personalizzate si presenta raramente.