このエラーは、リクエスト自体は届いているのに、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+xml の action parameter 側に寄ることがあります。
並べて確認したいもの
次の 4 つを横に並べて見ると、原因がかなり絞れます。
- WSDL の binding operation
- 実際に叩いている endpoint URL
- 送っている action の値
- Body の wrapper 要素
どれか 1 つでも別のサンプルや別 port の情報が混ざっていると、このエラーになりやすいです。
なぜ各チームに背負わせない方がいいのか
このエラーは、一度直すだけならそこまで難しくありません。
問題は、同じ上流 SOAP を複数のクライアント、バッチ、社内ツールがそれぞれ直接呼ぶ構成にすると、同じズレを各所で踏みやすいことです。
だからこそ、SOAPAction や binding ごとの癖は 1 か所に閉じ込めておいた方が保守しやすくなります。
SOAPless が効く場所
SOAPless が向いているのは、こういう契約依存の細部を下流へ漏らしたくない時です。
SOAPAction や SOAP version の差分は中で吸収し、下流チームには JSON と REST の入口だけを渡す方が、運用はかなり軽くなります。