【问题标题】:WCF Configuration with Mtom encoding and BasicHttpBinding not working - doing base64 encoding使用 Mtom 编码和 BasicHttpBinding 的 WCF 配置不起作用 - 进行 base64 编码
【发布时间】:2013-03-07 16:33:17
【问题描述】:

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

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

如果我配置端点绑定:

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

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

如果我配置它:

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

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

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

为什么要进行 base64 编码?

【问题讨论】:

    标签: wcf


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多