2012-10-11 58 views
1

目前我有一個Windows服務正在運行,它從隊列中讀取消息(MSMQ)。 在收到隊列中的消息時,非常偶然地拋出以下錯誤...(即,在對隊列上的4000個事務進行測試時,拋出異常拋出兩次...)XMLException:根元素丟失

任何建議到什麼可能造成這種情況?值得注意的是,隊列位於運行應用程序的不同服務器上。

20121011161348.899 Job() - >異常(XmlException)System.Xml.XmlException:根元素缺失。在 System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo(字符串RES)處 System.Xml.XmlReader.MoveToContent() System.Xml.XmlTextReaderImpl.ParseDocumentContent()在 System.Xml.XmlReader.IsStartElement(字符串的localName,串NS )在 System.Messaging.XmlMessageFormatter.Read(消息信息)中的 System.Messaging.Message.get_Body()在 PTFMiddleware.Queues.QueueMessaging.Receive [T](的MessageQueue隊列, 字符串&標籤,Nullable`1超時)at PTFMiddleware.ProcessCCHMessages.Worker.Job()

親切的問候, Fiona

回答

0

您的服務似乎期待XML數據,並且要找到隊列中不是XML的一些數據。從引用的錯誤消息中可以清楚地看到這一點。根本原因在於數據生產者;爲了識別數據生產者,您將需要識別隊列中導致問題的特定消息。

在測試集4000個的交易,使用二進制搜索技術將識別在短短14測試有問題的消息之一運行:

  1. 設置$低到1,$高至2000,$ altlo to 2001,$ althi to 4000.
  2. 測試交易從$ low到$ high。
  3. 如果沒有錯誤報告(問題出在 數據集的另一半),請將$ low設置爲$ altlo,$ high設置爲$ althi。如果您感到偏執謹慎,請重新運行測試以確認錯誤發生在這組數據中。
  4. 如果$ low = $ high,則指示位置的交易是錯誤的。
  5. 設置$ althi到$高,$高至(($低+ $高)/ 2),$ altlo到$高+ 1,$低到$低,並轉到步驟2。

一旦你找到違規信息,看看他們來自哪裏以及問題的性質。 XML中可能存在多個最外層的元素。可能根本沒有包含元素。找到損壞的數據源;固定。