代码之家  ›  专栏  ›  技术社区  ›  Tor Haugen

WCF客户端在HTTP Post消息中不包含XML声明

  •  4
  • Tor Haugen  · 技术社区  · 15 年前

    这篇文章是完成我通过Web服务管理代理(WSMA)与Cisco路由器通信任务的最后一个障碍,如前所述。 here here . 不过,你不必阅读这些帖子就能理解我目前的问题。

    问题是:我有构建服务和消息契约来匹配路由器的Web服务,并配置了一个basichttpbinding和一个端点。使用一个通道工厂,我现在几乎,但不是完全,成功地与路由器通信。

    作为回报,我一直得到一个SOAP错误,声明“缺少预期的XML标记或序列”。通过在路由器上使用WCF跟踪、小提琴和调试,以及通过HTTP手动发布消息,我终于知道了发生了什么。

    路由器上的WSMA代理要求HTTP请求中的SOAP消息负载包含XML声明。WCF也不发送。 就这么简单。

    所以我的问题是: 如何使用basichttpbinding使wcf在消息中包含XML声明?

    作为参考,我的绑定配置如下所示:

    <basicHttpBinding>
      <binding name="BasicHttpBinding_IWsmaService" messageEncoding="Text" textEncoding="UTF-8" allowCookies="false">
        <security mode="TransportCredentialOnly">
          <transport clientCredentialType="Basic" proxyCredentialType="None" realm="level_15" />
        </security>
      </binding>
    </basicHttpBinding>
    

    (如果您想知道-是的,我知道我正在通过未加密的传输发送明文凭据)

    1 回复  |  直到 15 年前
        1
  •  1
  •   Ladislav Mrnka    15 年前

    您必须创建自定义编码器。检查 WCF samples . 提供的示例演示如何使用现有编码器的组合创建新编码器。您将使用textmessageencodingbindingement创建内部messageencoder。您的writeMessage实现atoin将编写XML声明,然后调用内部编码器来编写序列化消息。

    您还需要将新编码器包装在自定义绑定元素中,并将其与httpTransportBindingElement一起用于自定义绑定。

    推荐文章