Scelta di un codificatore di messaggi
In questo argomento vengono illustrati criteri per scegliere tra i codificatori di messaggi inclusi in Windows Communication Foundation (WCF): binario, testo e MTOM (Message Transmission Optimization Mechanism).
In WCF, viene specificato come trasferire i dati attraverso una rete tra endpoint per mezzo di un'associazione, costituita da una sequenza di elementi di associazione. Un codificatore di messaggi è rappresentato da un elemento di associazione di codifica dei messaggi nello stack dell'associazione. Un'associazione include elementi facoltativi binding del protocollo, ad esempio un elemento di associazione di protezione o un elemento di associazione di messaggistica affidabile, un elemento di associazione di codifica dei messaggi obbligatorio e un elemento di associazione di trasporto obbligatorio.
L'elemento di associazione di codifica dei messaggi si trova sotto gli elementi facoltativi binding del protocollo e sopra l'elemento associazione del trasporto obbligatorio. Sul lato in uscita, un codificatore di messaggi serializza Message in uscita e lo passa al trasporto. Sul lato in ingresso, un codificatore di messaggi riceve il formato serializzato di un Message dal trasporto e lo passa al livello di protocollo superiore, se presente. In caso contrario, lo passa all'applicazione.
In caso di connessione a un client o a un server preesistente, potrebbe non essere possibile scegliere una particolare codifica dei messaggi dato che questi devono essere codificati come previsto dall'altro lato. Se, tuttavia, si sta scrivendo un servizio WCF, è possibile esporlo tramite più endpoint, ognuno dei quali utilizza una diversa codifica dei messaggi. In tal modo i client possono scegliere la migliore codifica per conversare con il servizio sull'endpoint, e possono avere la flessibilità di scegliere la migliore codifica per se stessi. L'utilizzo di più endpoint consente anche di combinare i vantaggi di codifiche del messaggio diverse con altri elementi di associazione.
Codificatori forniti dal sistema
WCF include tre codificatori di messaggi, rappresentati dalle tre classi seguenti:
- TextMessageEncodingBindingElement, il codificatore dei messaggi di testo, supporta codifica XML semplice e codifica SOAP. La modalità di codifica XML semplice del codificatore dei messaggi di testo è chiamata POX (Plain Old XML) per distinguerla dalla codifica SOAP basata su testo. Per attivare POX, impostare la proprietà MessageVersion su None. Utilizzare il codificatore dei messaggi di testo per interoperare con endpoint non WCF.
- BinaryMessageEncodingBindingElement, il codificatore di messaggi binario, utilizza un formato binario compresso ed è ottimizzato per le comunicazioni tra WCF e WCF, pertanto non è interoperativo. Questo è anche il codificatore più efficiente tra tutti quelli forniti da WCF.
- MTOMMessageEncodingBindingElement, l'elemento di associazione, specifica la codifica dei caratteri e la versione dei messaggi che utilizzano MTOM. MTOM è una tecnologia efficiente per trasmettere dati binari nei messaggi WCF. Il codificatore MTOM cerca di creare un equilibrio tra efficienza e interoperabilità. La codifica MTOM trasmette la maggior parte del codice XML in formato testo, ma ottimizza grandi blocchi di dati binari trasmettendoli senza introdurre modifiche e senza convertirli in formato testo. In termini di efficienza, tra i codificatori forniti da WCF, MTOM si situa tra quello di testo (il più lento) e quello binario (il più veloce).
Come scegliere un codificatore di messaggi
Nella tabella seguente vengono descritti i fattori comuni utilizzati per scegliere un codificatore di messaggi. Dare la priorità ai fattori che sono importanti per l'applicazione, quindi scegliere i codificatori più efficienti per tali fattori. Tenere anche conto di eventuali fattori aggiuntivi non elencati in questa tabella e qualsiasi codificatore di messaggi personalizzato che può essere richiesto nell'applicazione.
Fattore | Descrizione | Codificatori che supportano questo fattore |
---|---|---|
Set di caratteri supportati |
TextMessageEncodingBindingElement e MtomMessageEncodingBindingElement supportano solo le codifiche Unicode UTF8 e UTF16 (big-endian e little-endian). Se sono richieste altre codifiche, ad esempio UTF7, ASCII e così via, deve essere utilizzato un codificatore personalizzato. Per un codificatore personalizzato di esempio, vedere https://go.microsoft.com/fwlink/?LinkId=119857. |
Testo |
Ispezione |
L'ispezione è la capacità di esaminare i messaggi durante la trasmissione. Le codifiche di testo, con o senza l'utilizzo di SOAP, consentono a numerose applicazioni di ispezionare e analizzare i messaggi senza utilizzare strumenti specializzati. Si noti che l'utilizzo della protezione del trasferimento, a livello di messaggio o di trasporto, influisce sulla capacità di ispezionare i messaggi. La riservatezza evita che un messaggio venga esaminato, mentre l'integrità lo protegge dalle modifiche. |
Testo |
Affidabilità |
L'affidabilità è la flessibilità di un codificatore nei confronti degli errori di trasmissione. L'affidabilità può essere fornita anche a livello di messaggio, trasporto o applicazione. Tutti i codificatori WCF standard presumono che un altro livello stia fornendo l'affidabilità. Il codificatore non ha grandi capacità di recupero da un errore di trasmissione. |
Nessuno |
Semplicità |
La semplicità rappresenta la facilità con cui è possibile creare codificatori e decodificatori per una specifica di codifica. Le codifiche di testo sono particolarmente vantaggiose per la semplicità. La codifica di testo POX, inoltre, ha anche il vantaggio che non richiede supporto per l'elaborazione di SOAP. |
Testo (POX) |
Dimensione |
La codifica determina la quantità di sovraccarico imposto sul contenuto. La dimensione dei messaggi codificati è direttamente correlata alla velocità effettiva massima delle operazioni del servizio. Le codifiche binarie in genere sono più compatte di quelle di testo. Quando la dimensione del messaggio è importante, prendere in considerazione anche la compressione del contenuto del messaggio durante la codifica. La compressione aumenta tuttavia gli oneri di elaborazione sia per il mittente che per il destinatario del messaggio. |
Binario |
Flusso |
Il flusso consente alle applicazioni di iniziare a elaborare un messaggio prima che sia arrivato tutto. Per utilizzare in modo efficiente un flusso, è necessario che i dati importanti di un messaggio siano disponibili all'inizio del messaggio, affinché l'applicazione ricevente non debba attenderne l'arrivo. Le applicazioni che utilizzano il trasferimento tramite flussi, inoltre, devono organizzare i dati nel messaggio in modo incrementale affinché il contenuto non abbia dipendenze in avanti. In molti casi, è necessario trovare un compromesso tra l'utilizzo di un flusso e la riduzione massima delle dimensioni di trasferimento di quel contenuto. |
Nessuna |
Supporto di strumenti di terze parti |
Le aree di supporto per una codifica comprendono sviluppo e diagnosi. Gli sviluppatori di terze parti hanno investito massicciamente in librerie e toolkit per la gestione dei messaggi codificati nel formato POX. |
Testo (POX) |
Interoperabilità |
Questo fattore si riferisce alla capacità di un codificatore WCF di interoperare con servizi non WCF. |
Testo MTOM (parziale) |