gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:12:25 25 4
gpt4 key购买 nike

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

问题是这样的:我已经构建了服务和消息契约来匹配路由器的 Web 服务,并配置了一个 basicHttpBinding 和一个端点。并且使用 channel 工厂,我现在几乎(但不完全)与路由器成功通信。

作为返回,我不断收到 SOAP 错误,指出“缺少预期的 XML 标记或序列”。在路由器上使用 WCF 跟踪、 fiddler 和调试,并通过 HTTP 手动发布消息,我终于弄清楚了发生了什么。

路由器上的 WSMA 代理期望 HTTP 请求中的 SOAP 消息负载包含 XML 声明。 WCF 没有发送一个。就如此容易。

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

作为引用,我的绑定(bind)配置如下所示:

<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>

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

最佳答案

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

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

关于WCF 客户端在 HTTP POST 消息中不包含 XML 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3683350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com