1

Web サービスを使用してデータを処理しています。そして、私のように思えますが、リクエストを適切に送信しています。wsdl から Web 参照を追加し、セキュア トークンを追加しました。しかし、応答を取得しようとすると、次のエラーがスローされます。

無効な操作の例外: 「クライアントが「マルチパート/関連」の応答コンテンツ タイプを検出しました。

私が理解しているように、サービスはMTOMを使用してpdfファイルを送信しているため、次のエラーが発生します。エラーなしで MTOM を正しくデコードできるため、Web 参照を修正する方法はありますか、それともデコーダーを作成する必要があります。また、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--
4

1 に答える 1

1

ChangeService (Rational Synergy) WSDL ファイルの ASP.NET 生成コードと設定で同様の問題が発生しました。XML メッセージとともに MIME ヘッダーも受信していました。サービス参照を使用していると仮定すると、次の変更を加えて 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>

お役に立てれば

于 2014-04-04T16:27:30.577 に答える