Delphi 2009 Web服务“xml文档必须具有顶级元素”

时间:2009-06-03 15:15:09

标签: web-services delphi delphi-2009

我今天用Delphi 2009(已应用更新3/4)构建的各种delphi演示似乎都会导致我尝试使用的任何localhost Web服务的客户端返回“xml文档必须具有顶级元素“错误

这包括,例如,甚至简单的演示 http://blogs.embarcadero.com/pawelglowacki/2008/12/18/38624

我错过了什么?这有什么不对?非常令人沮丧......

5 个答案:

答案 0 :(得分:1)

尝试为HTTPSoapPascalInvoker.Options设置以下选项:

soRootRefNodesToBody
soUTF8InHeader
soUTF8EncodeXML

答案 1 :(得分:1)

您可能遇到的问题是您的apache模块上有什么问题,也许您的cgi脚本在Apache(HTTP 500)上导致严重的内部服务器错误。因此,您的apache会抛出错误,但该错误是HTML格式,而不是XML格式。因此,如果您正在使用Web服务,例如,您希望获得SOAP(这是XML),但您获得的HTML无法识别,因此您的应用程序可能会显示类似“xml文档必须具有顶级元素”的内容或者在我的情况下“客户发现TEXT / HTML的响应内容类型但预期的text / xml”。最糟糕的是,apache error.log不显示任何内容,access.log只会显示500错误(尽管我将其设置为Debug模式)。 我用Wireshark试图解决我的问题。而我发现的是对我上面解释的内容的确认,但我还没有解决我的问题。

答案 2 :(得分:0)

可能您生成的XML数据错误。 每个XML文档都必须具有顶级元素:

<xml version="..">
<topLevelElement>
 <element>
   ...
 </element>
 <element>
   ...
 </element>
<topLevelElement>

如果缺少此根元素,则反序列化器会抛出异常。

答案 3 :(得分:0)

这很可能意味着您从服务器获取HTML响应,因为加载SOAP库时出错或SOAP库本身出错。无法解析HTML并导致此错误。

代理可以帮助您,但您可能希望查看Wireshark,因为它可以让您非常轻松地嗅探流量,而不仅仅是针对HTTP流量。

答案 4 :(得分:0)

好的 - 这有点陌生 -

我发现这一切都在IIS下工作但在apache上失败了 (eed3si9n的解决方案不适用于apache)

更糟糕的是,我发现在apache下我的基本cgi请求内容字段 在apache下POST是空的 - 但我只是在IIS下部署,它工作得很好

所以要么罪魁祸首是我的apache安装还是有什么东西 apiss与delphi的apache(肯定会被广泛报道并修复)

所以---有没有人知道我应该在这看什么apache配置选项?

感谢您