1

如果有人能对此有所了解,我将不胜感激:

我想通过 Mtom 将二进制数据上传到服务。

如果我配置端点绑定:

<wsHttpBinding>
    <binding name="WsHttpMtomBinding" messageEncoding="Mtom" />

Mtom 工作 - 我可以在 Fiddler 中看到二进制内容是使用 Mtom 发送的。

如果我配置它:

 <basicHttpBinding>
    <binding name="WsHttpMtomBinding" messageEncoding="Mtom" />

如果我查看 Fiddler 发送的内容,它会被 base64 编码。

我读到如果消息大小小于某个大小,WCF 会进行 base64 编码。我确保二进制内容足够大。我必须使用 basicHttpBinding 因为该服务不在我的控制之下。

为什么要进行 base64 编码?

4

1 回答 1

4

发现问题:问题是提供给我的 WSDL。WSDL 中的类型设置为 HexBinary 而不是 Base64Binary。WCF 将仅识别 base64 以使用 MTOM 进行优化。除此之外,如果二进制数据低于 1024 字节,它将不会使用 MTOM。(虽然消息的标题仍会显示它是 MTOM)

摘自 MSDN:“MTOM 的目的是对 SOAP 消息进行编码以优化 base64 编码数据。以下是约束列表: R4151:可以优化包含 base64 编码数据的任何元素信息项。

B4152:WCF 优化包含 base64 编码数据且长度超过 1024 字节的元素信息项。”

希望这可以帮助某人。我花了几个小时才弄清楚这一点。

于 2013-03-09T16:50:54.720 回答