【问题标题】:Consuming SOAP with WCF: Receiving the reply body as raw XML使用 WCF 使用 SOAP:将回复正文作为原始 XML 接收
【发布时间】:2013-01-03 17:27:25
【问题描述】:

我正在使用提供的 WSDL 文件为第三方 SOAP 服务编写客户端。使用 WCF 执行此操作的默认方法是使用 svcutil 生成本地代理类,并让 WCF 自动反序列化对服务调用的回复到代理对象中。

但是 - 由于我已经为我的目的建立了与 XML 和 XPath 一起工作的代码,所以我对使用代理对象并不感兴趣,我宁愿只接收原始形式的主体,而不必重新序列化他们。另一方面,我不想自己编写 SOAP 请求的麻烦,并希望 WCF 继续处理它。

我知道 svcutil 的 /importXmlTypes 标志几乎可以让我到达那里,只需要包含 XmlNode 数组的顶级回复对象,但最好是我希望

XmlDocument SomeServiceMethod(...)

这样的事情可能吗?

【问题讨论】:

  • 您是否尝试过使用XmlElement(而不是XmlDocument)?那应该行得通。 XElement 应该也可以。
  • 使用 XmlElement 仅捕获正文中的第一个元素。奇怪的是,使用 XmlElement[] 并没有捕获任何东西,并且使用 XmlNode[] 最终可以工作(如 WCF 错误消息所建议的那样)并且足够好。谢谢!

标签: .net wcf soap


【解决方案1】:

嗯,你可以这样做,但它不是很好。您可以创建一个消息检查器并将其附加到您的代理(使用IClientMessageInspector)。示例:here。 因此,您可以截取纯形式的回复,但在响应到达代理时仍会进行反序列化。

但是,请考虑一下这将如何运作。您的代理已经可以完成这项工作,但您处理手动解析的回复(响应)。

另外,想想当服务更新/更改时会发生什么。您必须更改解析代码,而不仅仅是更新您的代理,然后使用更新后的合约。

无论如何,here's 一些关于自定义 WCF 行为的额外阅读。

【讨论】:

  • 是的,我知道检查员,正如你所说,我想避免不必要的反序列化(无论如何它有点难看)。如果你的意思是让我方便地访问我正在获取的数据,那么是的,它可以完成这项工作。但最终我的工作是将这些数据映射并存储到我的系统中。对于映射位,我得到了由 XPaths 定义的完整规范,并以方便的格式提供。为此,我们拥有可以自动化大量工作的工具,这些工具基于使用 xml 和 XPath。回复也很重要,请求是对数据的简单请求。
猜你喜欢
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
相关资源
最近更新 更多