2011-07-27 160 views
2

我有限的知識WCF以及通過WCF發送二進制數據,所以這個問題可能有些殘留的。通過WCF發送二進制數據:二進制VS MTOM編碼

我想知道有BinaryMessageEncodingBindingElementMtomMessageEncodingBindingElement發送的數據之間的差異。在閱讀本頁後,我仍不清楚何時使用哪種方法,從MSDN登錄Large Data and Streaming

而且,一個小問題:是帶有附件的郵件和MTOM消息是一回事嗎?

+2

它主要是關於互操作性。你想有可互操作的服務嗎?使用Mtom。你想僅從WCF客戶端調用服務嗎?使用二進制消息編碼。 –

回答

8

MTOM是使用多部分MIME編碼消息來發送大且過於昂貴爲base64編碼作爲純二進制消息的部分的標準。 SOAP消息本身作爲消息的初始部分發送,幷包含對二進制部分的引用,然後像WCF這樣的Web服務軟件堆棧可以將它們一起拉回,以創建消息的單個表示形式。

二進制編碼是完全專有的WCF,真的不只是有大的消息做。它提供了一個XML Infoset的二進制表示,它比整個網絡更加緊湊,並且比基於文本的格式更快地進行解析。如果您碰巧正在發送大量的二進制數據塊,那麼它恰好適合正在發送的其他字節。

流可以做到與任何消息格式使用。這更多的是關於何時將數據寫入整個網絡,而將數據在呈現給網絡傳輸之前完全緩存在存儲器中。較小的消息在發送更大的消息(尤其是包含大量二進制塊或流的消息)時需要進行緩衝,因此需要進行流式處理或耗盡內存資源。

+0

感謝您的詳細解答!那麼,MTOM只是一個帶有附件的SOAP消息,類似於SMTP郵件中的附件? –

+0

這是正確的。 –

+0

@Drew Marsh,但他怎麼能包含一個二進制數據(withougt解碼爲基礎64),然後通過HTTP發送? –