2013-06-26 3 views
1

MTOM 인코딩을 사용하여 PDF 첨부 개체를 반환하는 타사 웹 서비스를 사용하고 있습니다.MTOM 응답을 구문 분석 할 수 없습니다.

개체는 Data[]으로 구성되며 각 배열 요소는 ContentTypeInclude 필드를 포함합니다.

웹 서비스 메서드를 실행할 때 요청을 올바르게 완료하지만 포함 필드가 null으로 구문 분석되면 응답을 제대로 구문 분석하지 못합니다.

피들러를 실행하면 원격 웹 서비스가 사용 가능한 모든 필드가 포함 된 응답을 반환하는 것을 실제로 볼 수 있습니다.

이것은 SOAP에서 전송되는 것입니다 :

<m:GetDocImageResponse> 
    <x:data> 
     <x:item xmime5:contentType="*/*"> 
     <xop:Include href="cid:id1"/></x:item> 
    </x:data> 
</m:GetDocImageResponse> 

내가 Includehref라는 속성을 가지고 있으며,이 진 PDF 문서에 대한 참조를 포함 것을 알 수있다.

나는 WSDL에 따라 개체를 구문 분석하는 것을 시도하고있다 :

Data[] retObject = null; 
using (blahWS ws = new blahWS()) 
{ 
try{ 
retObject = ws.GetDoc(parameters); //request completes with no errors, but `Include` is parse as null 
[...] 
    } 
catch 
{..} 
} 

웹 서비스 참조는 다르게 간단한 basicHttpBinding

<basicHttpBinding> 
    <binding name="BasicHTTPwithMTOM" messageEncoding="Mtom" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" textEncoding="utf-8" />   
</basicHttpBinding> 

내가 구문 분석해야 하는가 응답과 함께 사용? 왜 필드를 파싱하지 않습니까?

편집 :

전체 SOAP 응답 : 제공된 WSDL을 사용하여 구축

HTTP/1.1 200 OK 
Server: gSOAP/2.7 
Content-Type: multipart/related; charset=utf-8; boundary="==nGpzR/KspN6ry7jG8CU4bonN2aujzfJamyN3xYjaldFXYpeUryNGb0UROC0B=="; type="application/xop+xml"; start="<SOAP-ENV:Envelope>"; start-info="text/xml" 
Content-Length: 180557 
Connection: close 

--==nGpzR/KspN6ry7jG8CU4bonN2aujzfJamyN3xYjaldFXYpeUryNGb0UROC0B== 
Content-Type: application/xop+xml; charset=utf-8; type="text/xml" 
Content-Transfer-Encoding: binary 
Content-ID: <SOAP-ENV:Envelope> 

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xop="http://www.w3.org/2004/08/xop/include" xmlns:xmime5="http://www.w3.org/2005/05/xmlmime" xmlns:m="http://www.mcleodsoftware.com/wsdl/ws4v.wsdl" xmlns:x="http://www.mcleodsoftware.com/schemas/ws4v.xsd"> 
<SOAP-ENV:Body> 
    <m:GetDocImageResponse> 
     <x:data> 
      <x:item xmime5:contentType="*/*"> 
       <xop:Include href="cid:id1"/></x:item> 
     </x:data> 
    </m:GetDocImageResponse> 
</SOAP-ENV:Body> 

--==nGpzR/KspN6ry7jG8CU4bonN2aujzfJamyN3xYjaldFXYpeUryNGb0UROC0B== 
Content-Type: */* 
Content-Transfer-Encoding: binary 
Content-ID: <id1> 
...binary... 

데이터 정의는 :

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.mcleodsoftware.com/schemas/ws4v.xsd")] 
public partial class Data : object, System.ComponentModel.INotifyPropertyChanged { 

    private Include includeField; 

    private string contentTypeField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute(Namespace="http://www.w3.org/2004/08/xop/include", Order=0)] 
    public Include Include { 
     get { 
      return this.includeField; 
     } 
     set { 
      this.includeField = value; 
      this.RaisePropertyChanged("Include"); 
     } 
    } 
+1

표준 mtom이 사용되는 경우 메시지 인코딩을 mtom으로 설정하는 한 구문 분석을 필요로하지 않습니다. 첨부 파일을 응답 개체에서 사용할 수 있습니다. –

+0

전체 SOAP 메시지를 제공 할 수 있습니까 (아니면 전체 MIME 메시지를 인코딩 된 첨부 파일을 제외하고?) 또한 관련 ServiceContract/DataContract 정의를 제공하십시오. MTOM 디코딩을 수행 할 DataMember가 byte [] 유형인지 확인해야합니다. –

+0

@EugeneOsovetsky SOAP 응답과 객체 정의를 추가했습니다. 내 자신의 데이터 연락처가 없으며 WSDL에서 만든 연락처를 사용하고있었습니다. – Victor

답변

0

보인다하여 WSDL의 explici 그 tly는 요소에 대한 스키마를 제공합니다. 그게 틀렸고 표준을 따르지 않는다고 확신합니다. 이 요소는 단순히 xsd : base64Binary 유형 (예 : https://wiki.duraspace.org/display/GSOC/MTOM+Support+on+the+WSDL+Level 참조)으로 선언되어야하며 WSDL에서 MTOM을 사용한다는 것을 나타내는 다른 표준 준수 방법이 있습니다 (예 : http://www.w3.org/Submission/WS-MTOMPolicy/ 참조)

귀하의 WSDL이 표준을 준수하도록 (또는 적어도 WCF가 "MTOM WSDL"이 어떻게 보이길 기대하는지), 나는 모든 것이 작동해야한다고 생각합니다. 실제로 "MTOM WSDL"이 어떻게 보이는지 알고 싶다면 WCF에서 간단한 MTOM 서비스 코드를 작성하십시오. http://msdn.microsoft.com/en-us/library/aa395209.aspx - 생성 된 WSDL 및 XSD를 살펴보십시오.

관련 문제