这不是Java特有的问题,但让我们以Java为例:在Java世界中,将xmime:expectedContentTypes="*/*添加到base64元素以在服务器端启用MTOM处理是一种标准实践--它导致@XmlMimeType注释、使用DataHandler而不是字节数组等。虽然这种描述当然大大简化了,但是当在模式中看到xmime:expectedContentTypes="*/*时,通常会被开发人员(更重要的是实现库)认为是'MTOM就绪‘。从我从这些例子中收集到的信息来看,C#世界的情况是一样的。
但是,这对我来说没有任何意义--该属性指定了我们在XML中可能实际期望的数据类型,而不是它可以与MTOM一起使用。在任何RFC或SOAP1.1的类似文档中,我也没有发现预期的内容类型和MTOM之间有任何直接的联系。
我的问题可以用两种方式表述:
发布于 2016-10-20 01:21:17
您似乎有点混淆了附件、SOAP附件和MTOM。
SOAP -附件最初是在2000年12月作为W3C注记 (不是规范)中引入的,并定义了对SOAP1.1中定义的传输绑定机制的扩展。本说明特别界定:
一种用于在MIME多部分/相关消息中携带的SOAP1.1消息的绑定,其方式是SOAP1.1消息的处理规则是preserved.The MIME多部分机制,用于封装复合文档,用于捆绑与SOAP1.1消息相关的实体,例如附件。
简单地说,它定义了一种机制,使多个文档(附件)以其本机格式与SOAP消息相关联,使用多部分mime结构进行传输。这是通过使用“内容-位置”和“内容-ID”标题的组合和一套规则来解释“内容位置”标题所引用的URI来实现的。
这种格式的SOAP消息可以形象化如下(封装为多部分/mime):

这也是您在使用萨伊时可能使用过的格式,但不再建议使用这种格式,除非您正在使用遗留代码。W3C注释后来在2004年被修改为“特性”级别(以及SOAP1.2),并通过SOAP机制成为最终被取代。
SOAP消息传输优化机制(MTOM)被正式定义为不是一个,而是三个独立特征,它共同工作以交付该功能:
如果您阅读了第二个文档,您就会意识到“附件”已经被XML二进制优化的“包”或XOP替换了。
XOP包是通过将XML Infoset的序列化放置在可扩展的打包格式(例如MIME多部分/相关的,参见RFC 2387)中创建的。然后,提取和重新编码(即,从base64中解码数据)其内容的选定部分为base64 64编码的二进制数据,并放入包中。所选部分的位置在XML中使用一个特殊元素标记,该元素使用URI链接到打包的数据。
简单地说,这意味着不是将数据封装为多部分/mime消息中的“附件”,而是通过“指针”或链接来引用数据。下列图表可能有助于理解:

现在我们有了背景,让我们回到你的问题。
话虽如此,在XML媒体类型上还有另一种XML媒体类型规范,即:
xmime:内容类型属性信息项允许Web应用程序优化处理由二进制元素信息项定义的二进制数据,并且应该被视为元数据。xmime:contentType属性的存在不会改变元素内容的值。
当您使用xmime:contentType和xmime:expectedContentTypes="application/octet-stream (不应使用)启用MTOM时,生成的WSDL将有如下所示的条目:
<element name="myImage" xmime:contentType="xsd:base64Binary" xmime:expectedContentTypes="application/octet-stream"/> --这是服务器声明它可以接收XML二进制优化包(可以分解为多部分MIME消息)的方式。
当客户端看到上面的内容时,客户端知道服务器可以接受XML二进制优化包,并按照定义的识别XOP文档生成适当的HTTP请求。
XOP文档在MIME类系统中使用的是"application/xop+ XML“媒体类型,所需的”类型“参数传递原始XML序列化的关联内容类型。
希望这能帮上忙!
https://stackoverflow.com/questions/39959358
复制相似问题