客户端发现响应内容类型为';多部分/相关

本文关键字:多部 相关 响应 发现 类型 客户端 | 更新日期: 2023-09-27 18:28:06

我正在使用web服务来处理数据。在我看来,我发送的请求是正确的。我从wsdl添加了web引用,并添加了一个安全令牌。但当我试图获得响应时,它会抛出以下错误:

无效的操作异常:"客户端发现响应内容类型为"多部分/相关"。

据我所知,我收到了以下错误,因为该服务正在使用MTOM发送pdf文件。是否有任何方法可以修复web引用,因为它可以正确解码MTOM而不会出错,或者我应该为它创建一个解码器。并在不使用web引用的情况下发送请求。

我尝试使用行响应并将其传递给MTOM读取器

 XmlDictionaryReader mtomReader = XmlDictionaryReader.CreateMtomReader(response.GetResponseStream() , Encoding.UTF8, XmlDictionaryReaderQuotas.Max);

但是得到另一个错误

System.Xml.XmlException:MTOM消息的内容类型标头不是建立

响应示例:

--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--

客户端发现响应内容类型为';多部分/相关

我在使用ASP.NET生成的代码时遇到了类似的问题&ChangeService(Rational Synergy)WSDL文件的设置。我还收到了MIME头和XML消息。假设您使用的是服务引用,我不得不使用以下更改修改web.config文件

首先,我必须将HttpBinding从basicHttpBinding修改为webHttpBinding,添加行为并配置端点。

在下面的配置中,更改标记在粗体中

<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>

希望这能帮助