Mtom编码和BasicHttpBinding不起作用的WCF配置-正在进行base64编码

Mtom编码和BasicHttpBinding不起作用的WCF配置-正在进行base64编码,wcf,Wcf,如果有人能说明这一点,我将不胜感激: 我想通过Mtom将二进制数据上传到服务 如果我使用以下配置端点绑定: <wsHttpBinding> <binding name="WsHttpMtomBinding" messageEncoding="Mtom" /> Mtom工作-我可以在Fiddler中看到二进制内容是用Mtom发送的 如果我将其配置为: <basicHttpBinding> <binding name="WsHttp

如果有人能说明这一点,我将不胜感激:

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

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

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

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

如果我将其配置为:

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

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

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

为什么要对其进行base64编码?

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

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

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

希望这对别人有帮助。我花了数小时的时间来解决这个问题。

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

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

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

希望这对别人有帮助。我花了好几个小时才弄明白