我对WCF以及通过WCF发送二进制数据的知识有限,所以这个问题可能有点初级。
我想知道用BinaryMessageEncodingBindingElement
和MtomMessageEncodingBindingElement
发送数据的区别。在阅读了MSDN关于大数据和流媒体的这一页后,我仍然不清楚何时使用哪种方法。
还有一个小问题:带附件的消息和MTOM消息是一回事吗?
MTOM是一种标准,它使用多部分mime编码的消息来发送消息的大部分,并且对于base64编码为纯二进制来说太昂贵了。SOAP消息本身作为消息的初始部分发送,并包含对二进制部分的引用,然后像WCF这样的web服务软件堆栈可以将二进制部分拉回一起以创建消息的单个表示。
二进制编码完全是WCF专有的,并不仅仅与大消息有关。它提供了XML Infoset的二进制表示,这种表示比基于文本的格式更加紧凑,解析速度也更快。如果你碰巧在发送大的二进制数据块,那么它正好与正在发送的其他字节相匹配。
流式传输可以用于任何消息格式。这更多的是关于何时通过网络写入数据,而不是在呈现给网络传输之前完全缓冲在内存中。较小的消息在发送之前缓冲更有意义,而较大的消息,特别是那些包含大型二进制块或流的消息,需要流式传输或将耗尽内存资源。