HTTP 400 (Bad Request) を取得している理由は、サービスがBasicHttpBinding
SOAP 1.1 を使用しており、SOAP 1.2 メッセージを送信している可能性が高いためだと思います (SOAP 1.2 を使用していることをコメントで示したように)。メッセージのフォーマットは両者で異なります。
最も簡単な解決策は SOAP 1.1 を使用することですが、SOAP 1.2 を使用する必要がある (または使用したい) 場合は、次の方法が役立ちます。
構成ファイルでは、エンドポイントまたはバインドを定義していません。WCF は 4.0 以降で既定値を使用するため、これで問題ありません。
ただし、HTTP のデフォルトのバインディングはBasicHttpBinding
. SOAP 1.2 をサポートするバインディングを使用する (またはメッセージを SOAP 1.1 に変更する) 必要があります。WSHttpBinding
SOAP 1.2 をサポートする を使用できますが、セキュリティ設定を変更する必要があります (デフォルトでは Windows です)。
もう 1 つのオプションは、SOAP1.1 を実装するカスタム バインディングを使用することです。
いくつかの例を挙げます (私は WCF サービス用の .NET 以外のクライアントを作成したことがないため、確実に機能するとは言えませんが、少なくとも正しい方向に進むはずです。
WSHttpBinding
設定ファイルのプロトコル マッピングをオーバーライドして、BasicHttpBinding
HTTPリクエストのデフォルトのプロトコル マッピングを から に変更します。WsHttpBinding
<protocolMapping>
<addBinding protocol="wsHttpBinding" scheme="http" />
</protocolMapping>
構成ファイルにバインディング セクションを追加して、セキュリティ モードを [なし] に設定できるようにします。これは次の<system.serviceModel>
セクションにあります。
<bindings>
<wsHttpBinding>
<binding>
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
name
バインディングの属性に値を設定していないことに注意してください。これにより、バインディング定義がデフォルトとして設定され、HTTP のデフォルト プロトコルを に変更することと合わせて、wsHttpBinding
SOAP 1.2 を送信できるようになります。
セキュリティに関する注意* SOAP をよりよく理解しようとしているだけであれば、セキュリティを none に設定しても問題ありませんが、本番環境ではこれを行うことを強くお勧めします。
カスタムバインディング
カスタムバインディングを使用したことはありませんが、次のようなものが機能するはずです:
<bindings>
<customBinding>
<binding name="Custom">
<textMessageEncoding messageVersion="Soap12" />
<httTransport />
</binding>
</customBinding>
</bindings>
これをエンドポイントに (エンドポイントの属性を使用して) 明示的に設定する必要がありbindingConfiguration
ます。つまり、構成ファイルにエンドポイント定義を作成する必要があります。
カスタム バインディングのアイデアは、BasicHttpBinding を使用した SOAP 1.2 メッセージ フォーマットからのものです。
うまくいけば、これがあなたにいくつかのアイデアを与え、あなたを再び前進させるでしょう.