XMLException:缺少根元素

时间:2012-10-11 16:02:58

标签: xml msmq

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

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

  

20121011161348.899工作() - >异常(XmlException)System.Xml.XmlException:缺少根元素。在   System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo(String res)at   System.Xml.XmlTextReaderImpl.ParseDocumentContent()at   System.Xml.XmlReader.MoveToContent()at   System.Xml.XmlReader.IsStartElement(String localname,String ns)at   System.Messaging.XmlMessageFormatter.Read(消息消息)at   System.Messaging.Message.get_Body()at   PTFMiddleware.Queues.QueueMessaging.Receive [T](MessageQueue队列,   字符串和放大器; label,Nullable`1 timeout)at   PTFMiddleware.ProcessCCHMessages.Worker.Job()

亲切的问候, 菲奥娜

1 个答案:

答案 0 :(得分:0)

您的服务似乎期待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设置为($ $ + $ high)/ 2),$ altlo设置为$ high + 1,$ low设置为$ low,然后转到第2步。
  6. 一旦找到有问题的消息,请查看它们的来源以及问题的性质。可能在生成的XML中有多个最外层元素。可能根本没有包含元素。找到损坏的数据源;固定。