I servizi che si possono realizzare con WCF e con qualsiasi tecnologia adempiente allo standard, comunicano con il client mediante SOAP, un linguaggio basato su XML contenente il corpo della richiesta, informazioni sul mittente e destinatario ed eventualmente soap header che contengono dettagli sulla sicurezza, transazioni ecc.
Anche se il formato XML è rappresentato come una struttura composta da nodi, non è detto che questo dev'essere in formato testo così come si è abiutati a vederlo. In WCF per esempio usando netTcpBinding si usufruisce in automatico di una codifica binaria dell'XML che permette una maggior compattezza dello stream di byte effettivo passante sul cavo, ottenendo così maggiori performance. Purtroppo questa tecnica non è interoperabile e soprattutto non utilizzabile per binding che fanno uso di protocolli http che necessitano obbligatoriamente di codifiche testuali del messaggio SOAP. Con messaggi relativamenti piccoli, tutto questo non è un problema, ma nel caso di servizi tipici che scambiano per esempio file, la mole di dati può diventare troppo grande a fronte della conversione in testo dei byte che si devono trasferire. Si prenda ad esempio il seguente servizio:
[ServiceContract(Namespace="http://schemas.aspitalia.com/UploadService")]
public interface IUploadService
{
[OperationContract]
void UploadFile(Stream data);
}
Dovendo inglobare l'oggetto Stream, rappresentante uno stream di byte, all'interno del messaggio SOAP è necessario che il motore converta i byte secondo una codifica Base64 che ha il pregio di essere un normale testo, ma ha il difetto di ingrossare con un rapporto di circa 4/3 i byte originali, aumentando così ciò che passa effettivamente sul cavo.
Per evitare ciò la specifica MTOM (Message Transmission Optimization Mechanism) prevede di effettuare la richiesta con un messaggio SOAP testuale, ma di inserire inoltre in coda, il binario di uno o più stream presenti nella richiesta, ottimizzando così il traffico e mantenendo l'interoperabilità.
L'uso è piuttosto semplice e consiste nel cambiare nella configurazione del binding il messageEncoding, sia nel client che nel server:
<services>
<service name="ASPItalia.com.IUploadService">
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="wsMtomHttpBinding"
contract="ASPItalia.com.IUploadService">
</endpoint>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="wsMtomHttpBinding" messageEncoding="Mtom" />
</wsHttpBinding>
</bindings>
- #36 - Ritornare un solo valore da una query LINQ con il metodo Single
- Autopsia di un'applicazione - Terza puntata: l'applicazione che si congela
- #36 - Ritornare un solo valore da una query LINQ con il metodo Single
- #79 - Scoprire il codice SQL generato da Entity Framework
- Windows Presentation Foundation 3.5: 3D interattivo e le altre novità del framework
- #35 - Applicare effetti bitmap agli elementi di WPF
- Riutilizzare porzioni di espressioni LINQ
- #44 - Creare un documento XML con attributi utilizzando LINQ
- Le novità di Communication e Workflow Foundation e la loro cooperazione nel .NET Framework 3.5
- #78 - Serializzazione implicita delle classi con WCF 3.5 SP1
- Epression Blend 2 December Preview
- Rilasciata la preview 1 di ASP.NET Ajax 4.0
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.






Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!