【问题标题】:XMLException: Root element is missingXMLException:缺少根元素
【发布时间】:2012-10-02 08:53:02
【问题描述】:

目前我正在运行一个从队列 (MSMQ) 读取消息的 Windows 服务。 在收到来自队列的消息时,非常偶尔会抛出以下错误......(即在对放置在队列上的 4000 个事务运行测试时,异常被抛出两次......)

关于可能导致此问题的任何建议?值得注意的是,队列与运行应用程序的服务器位于不同的服务器上。

20121011161348.899 Job() -> 异常 (XmlException) System.Xml.XmlException:缺少根元素。在 System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo(String res) at System.Xml.XmlTextReaderImpl.ParseDocumentContent() 在 System.Xml.XmlReader.MoveToContent() 在 System.Xml.XmlReader.IsStartElement(字符串本地名称,字符串 ns)在 System.Messaging.XmlMessageFormatter.Read(消息消息)在 System.Messaging.Message.get_Body() 在 PTFMiddleware.Queues.QueueMessaging.Receive[T](消息队列队列, 字符串和标签,Nullable`1 超时)在 PTFMiddleware.ProcessCCHMessages.Worker.Job()

亲切的问候, 菲奥娜

【问题讨论】:

    标签: xml msmq


    【解决方案1】:

    您的服务似乎需要 XML 数据,并在队列中找到一些不是 XML 的数据。从您引用的错误消息中可以清楚地看出这一点。根本原因在于数据生产者;要识别数据生产者,您需要识别队列中导致问题的特定消息。

    在包含 4000 个事务的测试集中,使用二分搜索技术将在短短 14 次测试运行中识别出有问题的消息之一:

    1. 将 $low 设置为 1,将 $high 设置为 2000,将 $altlo 设置为 2001,将 $althi 设置为 4000。
    2. 测试从 $low 到 $high 的交易。
    3. 如果没有报错(问题出在另一半 数据集),将 $low 设置为 $altlo,将 $high 设置为 $althi。如果您感到偏执和谨慎,请重新运行测试以确认错误确实在这组数据中发生。
    4. 如果 $low = $high,则指示位置的交易是错误的。
    5. 将 $althi 设置为 $high,将 $high 设置为 (($low + $high) / 2),将 $altlo 设置为 $high + 1,将 $low 设置为 $low,然后转到第 2 步。

    一旦发现有问题的消息,请查看它们的来源以及问题的性质。在生成的 XML 中可能有多个最外层元素。可能根本没有包含元素。找到损坏的数据源;修复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      相关资源
      最近更新 更多