2011-07-27 115 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发送? –