【问题标题】:Send binary data via WCF: binary vs MTOM encoding通过 WCF 发送二进制数据:二进制与 MTOM 编码
【发布时间】:2011-10-14 08:17:02
【问题描述】:

我对 WCF 以及通过 WCF 发送二进制数据的知识有限,所以这个问题可能有点初级。

我想知道用BinaryMessageEncodingBindingElementMtomMessageEncodingBindingElement 发送数据的区别。从 Large Data and Streaming 上的 MSDN 阅读此页面后,我仍然不清楚何时使用哪种方法。

还有一个小问题:带附件的消息和 MTOM 消息是一回事吗?

【问题讨论】:

  • 主要是关于互操作性。您想拥有可互操作的服务吗?使用 Mtom。您只想从 WCF 客户端调用服务吗?使用二进制消息编码。

标签: wcf encoding binding binary mtom


【解决方案1】:

MTOM 是一种标准,它使用多部分 mime 编码的消息来发送消息的一部分,这些部分很大并且对于 base64 编码为纯二进制的成本太高。 SOAP 消息本身作为消息的初始部分发送,并包含对二进制部分的引用,然后像 WCF 这样的 Web 服务软件堆栈可以将其拉回到一起以创建消息的单个表示。

二进制编码完全是 WCF 专有的,实际上不仅仅与大型消息有关。它提供了 XML 信息集的二进制表示,它比基于文本的格式更紧凑,解析速度更快。如果您碰巧要发送大的二进制数据块,那么它正好适合正在发送的其他字节。

流式传输可用于任何消息格式。这更多的是关于数据何时通过网络写入,而不是在呈现给网络传输之前完全在内存中缓冲。较小的消息在发送前缓冲更有意义,而较大的消息,尤其是那些包含大二进制块或流的消息,需要进行流式传输,否则会耗尽内存资源。

【讨论】:

  • 感谢您的详细解答!那么,MTOM 是否只是带有附件的 SOAP 消息,类似于 SMTP 消息中的附件?
  • @Drew Marsh,但是他怎么能在其中包含二进制数据(无需将其解码为 base 64)然后通过 http 发送?
  • 你有关于如何在 WCF 中将二进制文件附加为 MTOM 的代码示例吗?
猜你喜欢
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
相关资源
最近更新 更多