【问题标题】:How can a WCF XElement Response include the XML Declaration?WCF XElement 响应如何包含 XML 声明?
【发布时间】:2009-08-11 02:06:18
【问题描述】:

我有一个返回 XElement 的 WCF 服务,它工作正常,但是我希望它在响应中包含 XML 声明:

<?xml version="1.0" encoding="utf-8"?>

客户端不是我可以更改的,并且正在报告“结果不是 XML”我的 HTTP 结果的响应之间唯一的其他区别是我的 WCF 服务的内容类型:

Content-Type: application/xml; charset=utf-8

对比

Content-Type: text/xml; charset=utf-8

我假设“结果不是 XML”是由缺少 XML 声明引起的。如何将 XML 声明添加到 XElement 响应中?我认为 MessageFormatter 可能能够解决此问题,但我不知道从哪里开始。

【问题讨论】:

  • XML 中不需要 XML 声明。这不是问题。
  • 我编写了一个忘记 XML 声明的 WCF 客户端。 SharePoint Web 服务回复 SERVER_ERROR。如果我接受确切的请求并在 XML 声明之后发送它,则 Web 服务会正确回复。所以,我同意标准说不需要 XML 声明,但你必须同意微软不尊重标准。谁知道客户端是怎么写的?我认为这可能是问题所在。
  • 如何更改字符集?我要iso-8859-6数据怎么办?

标签: .net xml wcf xelement


【解决方案1】:

请参阅XDocument Class Overview,了解如何将 xml 声明添加到输出的快速示例。

虽然我必须同意@John,但缺少 xml 声明不太可能是问题,除非客户端手动将 XML 验证为文本(这将是一件愚蠢的事情,但我已经看到它完成了)并且是假设任何缺少 xml 声明的文本都不能是有效的 xml。

如果客户端是 .NET 客户端,则 enable WCF message logging 并验证客户端正在接收什么。如果客户端不是 .NET 客户端,则使用 Netmon 或 Wireshark 检查流量以验证有效负载。

【讨论】:

  • 更重要的是,如果 XML 声明存在,那么 XML 将是无效的。它将被另一个元素包裹,这将是无效的。
  • 约翰,你能解释一下这个评论吗?我只是好奇你在这里的意思。这可能是我对 XML 的无知,但是将 XML 声明放在文档的开头如何使其无效呢?
  • 有没有办法在不手动生成 XML 的情况下做到这一点?例如在使用 MemberContracts 时?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
  • 2016-06-18
  • 2020-06-16
  • 2012-01-28
  • 1970-01-01
相关资源
最近更新 更多