【问题标题】:Delphi 2009 Web Services "xml document must have a top level element"Delphi 2009 Web 服务“xml 文档必须有一个顶级元素”
【发布时间】:2009-06-03 15:15:08
【问题描述】:

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

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

我错过了什么?这里有什么问题?很郁闷...

【问题讨论】:

    标签: web-services delphi delphi-2009


    【解决方案1】:

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

    soRootRefNodesToBody
    soUTF8InHeader
    soUTF8EncodeXML
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        如果缺少此根元素,反序列化器将引发异常。

        【讨论】:

        • 感谢您的回复 但是,构建 xml 回复的机制是由 delphi 自动处理的,对吗?我的意思是如果你看上面 Pawel 的例子,没有明确的 xml 构造一定是我仍然缺少的东西?
        【解决方案4】:

        好吧——这有点奇怪——

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

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

        所以要么罪魁祸首是我的 apache 安装,要么有什么东西 在 apache 下使用 delphi 出错(肯定会被广泛报道和修复)

        那么 --- 有没有人知道我应该在这里查看哪些 apache 配置选项?

        谢谢

        【讨论】:

          【解决方案5】:

          这很可能意味着由于加载 SOAP 库的错误或 SOAP 库本身的错误,您从服务器收到了 HTML 响应。 HTML 无法解析并导致此错误。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-31
            • 2013-09-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多