soap-errorsaspnetsoapactionxml

Server did not recognize the value of HTTP Header SOAPAction

SOAPless Team3 min read

このエラーは、リクエスト自体は届いているのに、SOAPAction と実際の operation が噛み合っていない時に出やすいです。

Server did not recognize the value of HTTP Header SOAPAction

特に、古い ASP.NET 系の SOAP サービスや、SOAP 1.1 をかなり厳密に期待しているベンダー endpoint でよく見ます。

ありがちな原因

代表的なのは次です。

  • SOAPAction ヘッダーが付いていない
  • SOAPAction の値が違う
  • Body 側の operation wrapper が違う
  • SOAP 1.1 と 1.2 を取り違えている
  • 別環境や別 binding のサンプルを流用している

見落としやすいポイント

認証エラーや XML エラーに見えても、最初に確認したいのはもっと単純です。

HTTP ヘッダー上の action と、Body の operation と、WSDL の binding が一致しているか

SOAP 1.1 では SOAPAction ヘッダーそのものを見ます。SOAP 1.2 では、application/soap+xmlaction parameter 側に寄ることがあります。

並べて確認したいもの

次の 4 つを横に並べて見ると、原因がかなり絞れます。

  1. WSDL の binding operation
  2. 実際に叩いている endpoint URL
  3. 送っている action の値
  4. Body の wrapper 要素

どれか 1 つでも別のサンプルや別 port の情報が混ざっていると、このエラーになりやすいです。

なぜ各チームに背負わせない方がいいのか

このエラーは、一度直すだけならそこまで難しくありません。

問題は、同じ上流 SOAP を複数のクライアント、バッチ、社内ツールがそれぞれ直接呼ぶ構成にすると、同じズレを各所で踏みやすいことです。

だからこそ、SOAPAction や binding ごとの癖は 1 か所に閉じ込めておいた方が保守しやすくなります。

SOAPless が効く場所

SOAPless が向いているのは、こういう契約依存の細部を下流へ漏らしたくない時です。

SOAPAction や SOAP version の差分は中で吸収し、下流チームには JSON と REST の入口だけを渡す方が、運用はかなり軽くなります。