MTOM是W3C消息传输优化机制,是一种有效地向web服务发送二进制数据和从web服务发送二进制数据的方法。
一般来说,它是如何工作的?
发布于 2008-10-19 16:06:18
如果您将Wireshark (或启用了System.Net Logging)放在未启用MTOM的服务上,您应该会看到SOAP请求,其中的二进制数据编码为BASE64。将其作为BASE64发送会增加二进制数据的大小,但(我假设)会使其更具互操作性。
使用MTOM时,SOAP消息作为MIME消息发送,其中BASE64编码被替换为占位符。然后将二进制数据放在分隔符之间(对每段二进制数据都会发生这种情况),然后将其放在SOAP请求的末尾。然后发送未编码的二进制数据。MTOM还确定将其作为MIME消息发送是否会增加SOAP调用的大小,如果不提供保存,则将其作为普通SOAP消息发送。
This提供了一个通过网络发送的消息的示例。
发布于 2013-03-22 22:06:52
这一切都始于SOAP是XML这一事实。当您发送除文本之外的任何内容时,例如,图像-它必须转换为XML处理器可以理解的数据类型。
如果没有MTOM,您的图像将被转换为base64Binary,并直接放在SOAP信封的中间。这个转换过程会使数据变胖。
数据非常好用base64Binary字符串A >
下面是一个简单的例子:
使用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
此处为图像二进制数据
发布于 2016-12-13 19:51:24
有几个其他答案没有提到的因素。有人可能会想,为什么不使用MTOM作为默认值,因为它比文本消息编码(Base64)“更快”。这是因为MTOM并不总是更快。MTOM应该只用于大型消息传输,因为它会带来开销。对于较小的消息,MTOM的性能将比文本消息编码(Base64)更差。
如果MTOM用于大型消息,它比Base64更快,因为它使用原始二进制进行数据传输。要理解这一点,应该了解Base64是如何工作的。
Base64使用6位(log2(64))来表示1字符,这意味着base64使用4字符来表示24位(3字节)。因此,如果消息大小为n字节,base64将使用4*(n/3)字节来表示您的数据,这意味着它的速度将比MTOM慢1/3。
https://stackoverflow.com/questions/215741
复制相似问题