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

时间:2010-09-10 09:00:57

标签: wcf web-services wsma

这篇文章讲述了完成我通过Web服务管理代理(WSMA)与思科路由器通信的最后一个障碍,如herehere所述。但是,您不必阅读这些帖子来了解我当前的问题。

问题是:我已经构建了服务和消息合同以匹配路由器的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 个答案:

答案 0 :(得分:1)

您必须创建自定义编码器。检查WCF samples。提供的示例显示了如何创建具有现有编码器的新编码器。您将使用TextMessageEncodingBindingElement来创建内部MessageEncoder。您的WriteMessage implementatoin将编写XML声明,而不是调用内部编码器来编写序列化消息。

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