题
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。