2012-10-11 3 views
1

현재 큐 (MSMQ)에서 메시지를 읽는 Windows 서비스가 실행 중입니다. 대기열에서 메시지를 받으면 다음과 같은 오류가 발생합니다. (즉, 대기열에있는 4000 개의 트랜잭션에 대한 테스트를 실행하면 예외가 두 번 발생했습니다 ...)XMLException : 루트 요소가 없습니다.

제안 사항 : 무슨 일이 일어 났을까요? 주목할 점은 대기열이 응용 프로그램이 실행되는 다른 서버에 있다는 것입니다.

20121011161348.899 작업() -> 예외 (XmlException) System.Xml.XmlException : 루트 요소가 없습니다. System.Xml.XmlReader.IsStartElement에서 System.Xml.XmlReader.MoveToContent()에서 System.Xml.XmlTextReaderImpl.ParseDocumentContent()에서 System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo (문자열 입술) (문자열의 localName 문자열에서 NS) PTFMiddleware.Queues.QueueMessaging.Receive [T] (MessageQueue가 큐에 System.Messaging.Message.get_Body()에서 System.Messaging.XmlMessageFormatter.Read (메시지 메시지) 문자열 & 레이블에서, 타임 아웃 Nullable`1) at PTFMiddleware.ProcessCCHMessages.Worker.Job()

친절 감사합니다. Fiona

답변

0

서비스가 XML 데이터를 예상하고 대기열에서 XML이 아닌 데이터를 찾은 것 같습니다. 그 정도는 당신이 인용 한 오류 메시지에서 분명합니다. 근본 원인은 데이터 생성자와 함께 발생합니다. 데이터 생성자를 확인하려면 문제를 일으키는 큐의 특정 메시지를 식별해야합니다. 적은 14 테스트에서 문제가있는 메시지 중 하나를 식별하는 이진 검색 기술을 사용하여 4000 트랜잭션 테스트 세트에서

이 실행 :

  1. 설정 $ 낮게 1, $ 고 2000, $ altlo에서 2001, $ althi에서 4000까지.
  2. $ low에서 $ high로 트랜잭션을 테스트하십시오.
  3. 오류가보고되지 않으면 (문제가 데이터 세트의 다른쪽에 있음), $ low를 $ altlo, $ high를 $ althi로 설정하십시오. 편집증적이고 조심 스럽다면 테스트를 다시 실행하여 이 데이터 집합에서 발생하는지 확인하십시오.
  4. $ low = $ high이면 표시된 위치의 트랜잭션에 오류가 있습니다. 높은 $에
  5. 설정 $의 althi이 높은 $ + 1 (($ 낮은 +에 $ 높은)/2), $의 altlo 높은 $, 낮은 $ 낮은 $, 그리고 단계로 이동 2.

문제의 메시지를 찾으면 문제가 발생한 위치와 문제의 성격을 확인하십시오. 아마도 XML에서 가장 바깥쪽에있는 요소가 여러 개있을 수 있습니다. 아마도 포함 요소가 전혀 없을 수도 있습니다. 깨진 데이터 소스를 찾으십시오. 고치다.

관련 문제