使用Mtom编码和BasicHttpBinding的WCF配置不起作用 - 执行base64编码

时间:2013-03-07 16:33:17

标签: wcf

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

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

如果我使用以下命令配置端点绑定:

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

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

如果我配置:

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

如果我查看Fiddler发送的是什么,它会被编码为base64。

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

为什么要进行base64编码?

1 个答案:

答案 0 :(得分:3)

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

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

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

希望这有助于某人。花了我几个小时来解决这个问题。