soap-errorssoap-1-1soap-1-2wcf

The content type application/soap+xml; charset=utf-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8)

SOAPless Team3 min read

このエラーは、XML が壊れているというより、SOAP の流儀を取り違えている時に出やすいです。

The content type application/soap+xml; charset=utf-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8)

要するに、

  • 片方は SOAP 1.2 のつもりで話している
  • もう片方は SOAP 1.1 のつもりで受けている

というずれです。

なぜ起きるのか

SOAP 1.1 と SOAP 1.2 では、HTTP 上の約束も少し違います。

  • SOAP 1.1 では text/xmlSOAPAction を使うことが多い
  • SOAP 1.2 では application/soap+xml を使い、action もそちら側に寄る

そのため、client や proxy が違う binding を選ぶと、本文がそれっぽく見えていてもライブラリ側で即座に弾かれます。

最初に見たい点

  1. WSDL のどの binding / port を使っているか
  2. サービスが SOAP 1.1 と 1.2 の両方を出していないか
  3. 実際の Content-Type が何か
  4. 生成コードやクライアント設定が、想定した binding と一致しているか

「SoapUI では通るのにアプリからだけ失敗する」という時は、ツールごとに選んだ binding が違うだけ、ということが本当によくあります。

先に XML を疑わない方がいい理由

namespace や Body の shape を細かく見る前に、このエラーでは binding レベルの取り違えを疑った方が早いです。

つまり、失敗しているのは業務データより前の層です。

SOAPless が効く場所

こういう binding の選択や SOAP version の固定は、1 つの連携境界に寄せておく方が安全です。

一度正しい binding を掴んだら、その複雑さを各クライアントに再配布せず、下流には JSON の入口だけを渡す方が保守しやすくなります。