2013-12-09 2 views
2

사용자가 특정 XML 파일을 업로드 할 수있는 웹 응용 프로그램이 있습니다. 그런 다음 XML 파일을 웹 서비스에서 예상되는 객체로 변환해야합니다.Envelop 태그가 xml 객체에 없습니다.

< 봉투의 xmlns = 'http://schemas.xmlsoap.org/soap/envelope/이'> 기대하지 않은 :

코드 : 내가 deserializeOCTE 개체로 XML 문서를하려고 할 때

var document = new XmlDocument(); 
document.Load(@"C:\Desktop\CteWebservice.xml");  

var serializer =new XmlSerializer(typeof(OCTE)); 
var octe = (OCTE)serializer.Deserialize(new StringReader(document.OuterXml)); 
var serviceClient = new WSServiceClient(); 
serviceClient.InsertOCTE(octe); 

나는이 오류가 발생합니다.

물론, OCTE 클래스에는 Envelope 속성이 없습니다.

제 질문은 OCTE 클래스에이 태그를 포함해야하며 그렇지 않으면 클라이언트에서 다른 것을해야합니까?

답변

0

XML 파일에 SOAP Envelope, SOAP Body 요소 및 잠재적 SOAP가 포함될 전체 SOAP 요청이 포함되어 있다는 사실로 인해 발생하는 것처럼 보이는 두 가지 이상의 다른 솔루션이 있다고 생각할 수 있습니다 헤더 요소.

SOAP 본문 요소의 구조는 대부분 문서 리터럴이 포장 될 SOAP 바인딩 스타일에 따라 달라집니다 - 자세한 내용은 http://www.ibm.com/developerworks/webservices/library/ws-usagewsdl/index.html?ca=dat-

보고를 위해 이것은 즉, 당신이 찾고있는 OCTE 구조, 수도 요청 요소 내에 내장 될, 같은 (문서 리터럴 포장 SOAP 바인딩 스타일) 가능한 솔루션 그래서

<soap:envelope> 
    </soap:header> 
    <soap:body> 
     <insertOCTERequest> 
      <OCTE> 
       ... 
      </OCTE> 
     </insertOCTERequest> 
    </soap:body> 
</soap:envelope> 

  1. CteWebService.xml이 OCTE 구조를 루트 요소로 갖도록 serialize되었는지 확인하십시오.

  2. 등 XPath를 사용하여 OCTE 요소를 찾고 대신 deserialize합니다. 당신 만 OCTE 요소가 지정된 XML 네임 스페이스에 속하는 경우 XML을 NamespaceManager를 초기화 할 필요가

var nsmgr = ... 
var element = document.SelectSingleNode("//OCTE", nsmgr); 

, 그렇지 않으면 당신은 그것을 밖으로 남길 수 있습니다.

관련 문제