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

一般情况如何?

有帮助吗?

解决方案

如果您使用 Wireshark (或已启用 System.Net日志记录)在非MTOM启用的服务上,你应该看到带有编码为二进制数据的SOAP请求BASE64。将其作为BASE64发送会增加二进制数据的大小,但(我假设)使其更具互操作性。

使用MTOM,SOAP消息将作为MIME消息发送,BASE64编码将替换为占位符。然后将二进制数据放在分隔符之间(对于每个二进制数据发生),然后放在SOAP请求的末尾。然后以未编码的形式发送二进制数据。 IIRC,MTOM还确定将它作为MIME消息发送是否会增加SOAP调用的大小,如果不提供保存,它将把它作为普通的SOAP消息发送。

提供了一个示例通过电线发送的消息看起来像。

其他提示

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

如果没有MTOM,您的图片将转换为 base64Binary ,并放置在SOAP信封的中间。此转换过程使数据变胖。

  

<!> lt; tns:data <!> gt;非常looooooooooooooooooooong base64Binary字符串<!> lt; / tns:data <!> gt;

这是一个简单的说明:

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

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

Content-id:<!> quot; SomeUniqueID <!> quot;
  内容类型:image / png

     

图像二进制数据

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top