我对WCF知识有限以及通过WCF发送二进制数据,所以这个问题可能有点粗糙。
我想知道使用BinaryMessageEncodingBindingElement
和MtomMessageEncodingBindingElement
发送数据之间的区别。在Large Data and Streaming上从MSDN阅读此页面后,我还不清楚何时使用哪种方法。
另外,一个小问题:带有附件和MTOM消息的消息是一样的吗?
答案 0 :(得分:8)
MTOM是一种标准,它使用多部分mime编码的消息来发送大部分消息,并且对于base64编码来说太昂贵而不能作为纯二进制编码。 SOAP消息本身作为消息的初始部分发送,并包含对二进制部分的引用,然后像WCF这样的Web服务软件堆栈可以一起拉回以创建消息的单个表示。
二进制编码完全是WCF专有的,实际上并不仅仅与大型消息有关。它呈现了XML Infoset的二进制表示,它在线上更加紧凑,并且比基于文本的格式更快地解析。如果您碰巧发送大量二进制数据块,那么它恰好适合正在发送的其他字节。
可以使用任何消息格式进行流式处理。这更多的是关于何时通过网络写入数据而不是在呈现给网络传输之前完全缓存在备忘录中。较小的消息在发送之前缓冲起来更有意义,更大的消息,特别是包含大型二进制块或流的消息,需要流式传输或耗尽内存资源。