【问题标题】:Illegal characters in XML document in ASP.NET Web ServiceASP.NET Web 服务中 XML 文档中的非法字符
【发布时间】:2009-02-14 22:31:38
【问题描述】:

我将提出并回答我自己的问题,希望没人介意,但我认为这对其他人可能有用。

如果您设置的 ASP.NET Web 服务返回的对象包含对 XML 无效的字符,则在将对象序列化为 SOAP xml 并且客户端尝试反序列化该 xml 后,将引发异常。

你如何解决这个问题?

【问题讨论】:

  • 如果您的 Web 服务返回格式错误的 XML,解决方案是修复 Web 服务,而不是修补格式错误的 XML。 Web 服务可能正在做其他您无法轻易隐藏的错误事情。
  • 这是我从数据库中提取的数据。字符编码正确,只是对 xml 无效。我宁愿让我的用户修复这些字符,也不愿让我的网络服务在每次输入非法字符时中断。如果你告诉读者不要验证它所读的内容,反序列化就会起作用。
  • 您使用什么 XML 组件来构造这个包含无效字符的 XML?我打算在这里冒险并猜测答案是“我正在使用字符串连接。”
  • 不,我正在使用 XmlSerializer。我正在序列化的数据中有奇怪的不可打印字符,尽管 XmlSerializer html 对它们进行了编码,但它仍然会引发异常。我使用的是标准的 ASP.NET 网络服务,我没有自己实现soap。

标签: asp.net xml web-services serialization


【解决方案1】:

为了解决这个问题,我使用属于 .NET 的 wsdl.exe 应用程序为我的 web 服务生成了类文件。这很简单,只需在命令提示符下输入wsdl.exe <path to webservice>

生成之后我重载了方法

protected XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize)

喜欢这个

protected override XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize)
{
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.CheckCharacters = false;
    return XmlTextReader.Create(message.Stream, settings);
}

这告诉 XmlTextReader 忽略它正在读取的 XML 文件的有效性。当我要立即反序列化它时,我没有理由关心 xml 是否有效。

希望这可以帮助遇到同样问题的人!

【讨论】:

    猜你喜欢
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多