MTOM 인코딩을 사용하여 PDF 첨부 개체를 반환하는 타사 웹 서비스를 사용하고 있습니다.MTOM 응답을 구문 분석 할 수 없습니다.
개체는 Data[]
으로 구성되며 각 배열 요소는 ContentType
및 Include
필드를 포함합니다.
웹 서비스 메서드를 실행할 때 요청을 올바르게 완료하지만 포함 필드가 null
으로 구문 분석되면 응답을 제대로 구문 분석하지 못합니다.
피들러를 실행하면 원격 웹 서비스가 사용 가능한 모든 필드가 포함 된 응답을 반환하는 것을 실제로 볼 수 있습니다.
이것은 SOAP에서 전송되는 것입니다 :
<m:GetDocImageResponse>
<x:data>
<x:item xmime5:contentType="*/*">
<xop:Include href="cid:id1"/></x:item>
</x:data>
</m:GetDocImageResponse>
내가 Include
이 href
라는 속성을 가지고 있으며,이 진 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");
}
}
표준 mtom이 사용되는 경우 메시지 인코딩을 mtom으로 설정하는 한 구문 분석을 필요로하지 않습니다. 첨부 파일을 응답 개체에서 사용할 수 있습니다. –
전체 SOAP 메시지를 제공 할 수 있습니까 (아니면 전체 MIME 메시지를 인코딩 된 첨부 파일을 제외하고?) 또한 관련 ServiceContract/DataContract 정의를 제공하십시오. MTOM 디코딩을 수행 할 DataMember가 byte [] 유형인지 확인해야합니다. –
@EugeneOsovetsky SOAP 응답과 객체 정의를 추가했습니다. 내 자신의 데이터 연락처가 없으며 WSDL에서 만든 연락처를 사용하고있었습니다. – Victor