選擇訊息編碼器
本主題說明從 Windows Communication Foundation (WCF) 中所包含的訊息編碼器進行選擇的準則:二進位、文字和「訊息傳輸最佳化機制」(Message Transmission Optimization Mechanism,MTOM)。
在 WCF 中,您可以藉由一連串「繫結項目」(Binding Element) 所組成的「繫結」(Binding),指定如何跨網路在端點之間傳輸資料。 訊息編碼器是由繫結堆疊中的訊息編碼繫結項目所表示。 繫結包含選擇性通訊協定繫結項目 (例如安全性繫結項目或可靠的訊息繫結項目)、必要的訊息編碼繫結項目和必要的傳輸繫結項目。
訊息編碼繫結項目位在選擇性通訊協定繫結項目之下,在必要的傳輸繫結項目之上。 在傳出端,訊息編碼器會序列化傳出的 Message,並會將它傳遞至傳輸。 在傳入端,訊息編碼器會從傳輸接收 Message 的序列化形式,並會將它傳遞至更高的通訊協定層 (如果有的話),否則會傳遞至應用程式。
連接到已存在的用戶端或伺服器時,您可能沒有使用特定訊息編碼的選擇,因為您必須以另一端預期的方式,對訊息進行編碼。 不過,如果要撰寫 WCF 服務,您可以透過多個端點,每個端點使用不同的訊息編碼,來公開服務。 這會讓用戶端在對它們來說是最佳端點上,選擇最佳編碼方式來與服務交談,而且會提供用戶端彈性來選擇最佳編碼方式。 使用多個端點,也會將不同訊息編碼的好處與其他繫結項目結合。
系統提供的編碼器
WCF 包含三個訊息編碼器,由下列三個類別所表示:
TextMessageEncodingBindingElement 即文字訊息編碼器,支援純 XML 編碼方式和 SOAP 編碼方式。 文字訊息編碼器的純 XML 編碼模式稱為 "plain old XML" (POX),與文字為主的 SOAP 編碼方式有所區別。 若要啟用 POX,請將 MessageVersion 屬性設定為 None。 您可以使用文字訊息編碼器,與非 WCF 端點交互操作。
BinaryMessageEncodingBindingElement 即二進位訊息編碼器,會使用壓縮的二進位格式,且已針對 WCF 與 WCF 之間通訊最佳化,因此無法交互操作。 這也是 WCF 提供的所有編碼器中最具效能的編碼器。
MTOMMessageEncodingBindingElement 即繫結項目,會指定以 MTOM 編碼訊息的字元編碼和訊息版本處理。 MTOM 是在 WCF 訊息中傳輸二進位資料的有效技術。 MTOM 編碼器會嘗試在效率和互通性之間建立平衡。 MTOM 編碼方式會以文字格式傳輸大部分的 XML,但是在傳輸大型區塊的二進位資料時,會依照原狀來傳送 (不轉換成文字),好讓這些資料最佳化。 就效率而言,在 WCF 所提供的編碼器中,MTOM 是介於文字 (最慢) 和二進位 (最快) 之間。
如何選擇訊息編碼器
下表說明選擇訊息編碼器時的通用因素。 將對您應用程式最重要的因素設定優先權,然後選擇最適合這些因素的訊息編碼器。 請務必考慮表格中所未列出的任何其他因素,以及應用程式可能需要的任何自訂訊息編碼器。
因素 | 描述 | 支援這個因素的編碼器 |
---|---|---|
支援的字元集。 |
TextMessageEncodingBindingElement 與 MtomMessageEncodingBindingElement 只支援 UTF8 及 UTF16 Unicode (「位元組由大到小」(Big-Endian) 與「位元組由小到大」(Little-Endian)) 編碼。 如果不需要如 UTF7 或 ASCII 等其他編碼,則必須使用自訂編碼器。 如需範例自訂編碼器,請參閱自訂訊息編碼器。 |
文字 |
檢閱 |
檢查是傳輸期間檢查訊息的能力。 不論是否使用 SOAP,文字編碼都會讓許多應用程式檢查及分析訊息,而不需要使用特別工具。 請注意,在訊息或傳輸層級上,傳輸安全性的使用會影響檢查訊息的能力。 機密性會保護訊息不受檢查,而完整性則會保護訊息不受修改。 |
文字 |
可靠性 |
可靠性是編碼器抵抗傳輸錯誤的能力。 此外,也可以在訊息、傳輸或應用程式層提供可靠性。 所有標準的 WCF 編碼器都假設另一層會提供可靠性。 編碼器不太能從傳輸錯誤復原。 |
無 |
簡單 |
簡單表示可輕鬆建立某個編碼規格的編碼器和解碼器。 文字編碼對簡單而言特別有利,而且 POX 文字編碼還有不需要支援來處理 SOAP 的額外好處。 |
文字 (POX) |
大小 |
編碼方式決定了內容所需的負荷量。 編碼訊息的大小與服務作業的最大輸送量直接相關。 二進位編碼通常比文字編碼更為精簡。 當訊息太大時,請考慮在編碼期間一併壓縮訊息內容。 不過,對於訊息傳送者和接收者,壓縮都會增加處理成本。 |
Binary |
資料流 |
資料流可讓應用程式在整個訊息送達之前開始處理訊息。 有效使用資料流,會要求訊息開頭便提供訊息的重要資料,因此接收的應用程式不需要等待訊息送達。 而且,使用資料流處理傳輸的應用程式必須累加組織訊息中的資料,因此內容沒有轉接相依性。 在許多情況下,您必須在資料流內容和擁有內容的最小傳輸大小之間妥協。 |
無 |
協力廠商工具支援 |
編碼方式的支援區域包含開發和診斷。 協力廠商開發人員已經在處理 POX 格式編碼訊息的程式庫和工具組投入大量投資。 |
文字 (POX) |
互通性 |
這個因素是指 WCF 編碼器與非 WCF 服務交互操作的能力。 |
文字 MTOM (部分) |