【问题标题】:How does MTOM work?MTOM 是如何工作的?
【发布时间】:2010-09-17 23:04:47
【问题描述】:

MTOM 是 W3C 消息传输优化机制,是一种有效地将二进制数据发送到 Web 服务和从 Web 服务发送出的方法。

一般来说它是如何工作的?

【问题讨论】:

    标签: w3c mtom


    【解决方案1】:

    这一切都始于 SOAP 是 XML 的事实。当您发送文本以外的任何内容时,例如,图像 - 它必须转换为 XML 处理器可以理解的数据类型。

    没有 MTOM,您的图像将被转换为 base64Binary 并放置在 SOAP 信封的中间。这种转换过程使数据变胖。

    非常棒的base64Binary字符串

    这是一个简单的例子:

    使用 MTOM,图像将作为 MIME 附件在信封外传输 - 简而言之,它根据其原始数据类型发送:jpg、png 或gif。当然它仍然是作为二进制数据传输的,但是这次没有与 XML 相关的转换,避免了计算开销。 XOP 出现在图片中,因为它提供了外部化图像的位置。

    <soap:Envelope>
        <soap:Body>
            <tns:data>
                <xop:include href="SomeUniqueID-ThatLeadsToTheImage"/>
            </tns:data>
        </soap:Body>
    </soap:Envelope>
    

    内容 ID:“SomeUniqueID”
    内容类型:image/png

    这里是图片二进制数据

    【讨论】:

    • 你有这个示例代码吗,实际上我需要了解在 中包含什么。我对此感到困惑。
    • 非常漂亮的插图。香蕉符号也很有趣。 Mtom 完全摇摆不定。
    • 简化示例。谢谢!
    • 当图片超过1000字时。谢谢。
    • XOP 是否可以包含图片 URL,以便客户端无需下载/包含图片到内存中?而服务器本身可以下载它吗?或者我希望小说成为现实,而没有有效的方法来快速发送大图像?所有遗留的 JAXB 类完全破坏了我们的反应堆应用程序,只有很少的 rps,图像约为 1.5 mb :crying:.
    【解决方案2】:

    有一些其他答案没有提到的因素。有人可能会想为什么不使用 MTOM 作为默认值,因为它比文本消息编码(Base64)“更快”。这是因为 MTOM 并不总是更快。 MTOM 应该只用于大型消息传输,因为它会带来开销。对于小消息,MTOM 的性能会比 Text message encoding (Base64) 差。

    如果 MTOM 用于大型消息,它比 Base64 更快,因为它使用原始二进制文件进行数据传输。要理解这一点,应该了解 Base64 的工作原理。

    Base64使用6位(log2(64))来表示1个字符,也就是说base64使用4个字符来表示24位( 3 个字节)。因此,如果消息大小为 n 字节,base64 将使用 4*(n/3) 字节 来表示您的数据,这意味着它将 慢 1/ 3 比 MTOM。

    【讨论】:

      【解决方案3】:

      如果您将Wireshark(或启用System.Net Logging)放在未启用MTOM 的服务上,您应该会看到二进制数据编码为BASE64 的SOAP 请求。将其作为 BASE64 发送会增加二进制数据的大小,但(我认为)使其更具互操作性。

      使用 MTOM,SOAP 消息作为 MIME 消息发送,其中 BASE64 编码被替换为占位符。然后将二进制数据放在定界符之间(每条二进制数据都会这样),然后放在 SOAP 请求的末尾。然后二进制数据未经编码发送。 IIRC,MTOM 还确定将其作为 MIME 消息发送是否会增加 SOAP 调用的大小,如果不提供保存,它将作为普通 SOAP 消息发送。

      This 提供了通过网络发送的消息的示例。

      【讨论】:

      • “然后将二进制数据放在分隔符之间”或者,可以将二进制数据的链接作为 SOAP 消息的一部分发送,以允许二进制数据存在于 XML 之外并被下载,例如,在 HTTP/S 服务器集群上以提高性能。这称为“通过引用”
      猜你喜欢
      • 2011-02-06
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 2021-04-27
      • 2011-02-18
      • 2017-07-24
      • 2016-11-13
      • 2017-10-11
      相关资源
      最近更新 更多