In precedenza abbiamo già affrontato il tema del binding, sebbene in modo estremamente approssimativo. Il binding è una sorta di stack che definisce come il servizio si espone sulla rete.
Il binding si presenta come una collezione di elementi funzionali che si occupano di trasporto, codifica/decodifica e comportamenti (behaviors). In cima a tutto questo c'è il dispatcher che si occupa di invocare il metodo richiesto.
Il layer di trasporto con la versione 1 di Indigo coprirà i protocolli HTTP, HTTPS, TCP, MSMQ, Named Pipes. In futuro sarà previsto un trasporto in memory per ragioni di performances.
Il layer successivo si occupa di encoding. Nella versione 1 di Indigo troveremo tre forme di engoding: text (UTF-7 e UTF8), binary e MTOM (Message Transmission Optimization Mechanims). L'encoder testuale mantiene la piena interoperabilità basata sulle specifiche WS-*. Tale interoperabilità vien meno con l'encoder binario il quale ha comunque il vantaggio delle performances. L'encoder MTOM lo possiamo chiamare senz'altro il successore di DIME (usato sino a WSE 2.0) per il trasferimento di dati binari.
Il layer di behavior si occupa sostanzialmente di security, metadato e resilienza. La security in questo caso va intesa in senso ampio in quanto è possibile configurare la security del canale, del servizio e le credenziali che vi entrano in gioco. E' inoltre possibile definire come pubblicare il metadatato, cioè se rendere visibile il WSDL, il supporto al Meta Data Exchange e così via. Infine potete definire i meccanismi di throttling, assegnando un numero massimo di connessioni, di istanze, di chiamate concorrenti ecc.
Il binding può essere definito sia a livello di file di configurazione che di codice. Ovviamente la flessibilità è superiore se si usano i files di configurazione in quanto è possibile definire a posteriori come esporre i propri servizi.
L'aspetto interessante è che un medesimo servizio può esporre più bindings. Ciò significa che è possibile, ad esempio, definire un binding NetProfileNamedPipeBinding (il più performante al momento) per far dialogare servizio e consumer sulla stessa macchna, definire NetProfileTcpBinding per l'Intranet e l'WsProfileBinding per Internet. Sempre usando lo stesso identico contratto e quindi codice e soprattutto potendo consumare il servizio con tutti i tre meccanismi contemporaneamente.