我正在使用网络服务来处理数据。而在我看来,我正在发送请求。我从wsdl添加了Web引用并添加了一个安全令牌。但是当我试图得到响应时,它会引发以下错误:
无效的操作异常:“客户发现'multipart / related'的响应内容类型。
据我所知,我收到以下错误,因为该服务正在使用MTOM发送pdf文件。有没有办法修复Web引用,因为它可以正确解码MTOM而不会出错或我应该为它创建一个解码器。并且在不使用Web引用的情况下发送请求。
我尝试使用行响应并将其传递给MTOM阅读器
XmlDictionaryReader mtomReader = XmlDictionaryReader.CreateMtomReader(response.GetResponseStream() , Encoding.UTF8, XmlDictionaryReaderQuotas.Max);
但是又出现了另一个错误
System.Xml.XmlException:MTOM消息的Content-Type标头没有 找到。
回应示例:
--MIMEBoundaryurn_uuid_F468164F66D5B7FD071377072332741
Content-Type: application/xop+xml; charset=iso-8859-1; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: <0.urn:uuid:F468164F66D5B7FD071377072332742@apache.org>
Soap-xml
--MIMEBoundaryurn_uuid_F468164F66D5B7FD071377072332741
Content-Type: application/pdf
Content-Transfer-Encoding: binary
Content-ID: <urn:uuid:F468164F66D5B7FD071377072332744@apache.org>
PDF二进制文件
--MIMEBoundaryurn_uuid_F468164F66D5B7FD071377072332741--
答案 0 :(得分:1)
我在ASP.NET生成的代码中遇到了类似的问题。 ChangeService(Rational Synergy)WSDL文件的设置。 我还收到了MIME标头和XML消息。假设您正在使用服务引用,我必须使用以下更改修改web.config文件
首先,我必须将HttpBinding从basicHttpBinding修改为webHttpBinding,添加行为并配置端点。
在下面的配置中,更改标记为BOLD
<bindings>
<!-- basicHttpBinding>
<binding name="ChangeServiceHttpBinding" messageEncoding="Mtom" />
</basicHttpBinding -->
<webHttpBinding>
<binding name="ChangeServiceHttpBinding" />
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="webEndpoint">
<webHttp defaultBodyStyle="Wrapped" defaultOutgoingResponseFormat="Xml"
helpEnabled="true"/>
</behavior>
</endpointBehaviors>
</behaviors>
<client>
<endpoint address="http://hostname:port_number/change/webservices/ChangeService"
binding="webHttpBinding"
bindingConfiguration="ChangeServiceHttpBinding"
contract="ChangeSynergyService.ChangeService"
name="ChangeServiceHttpPort" behaviorConfiguration="webEndpoint" />
</client>
希望这有帮助