WCF クライアントから SAP PI バスで Web サービスを呼び出すときに問題が発生しました。操作は一方向として定義されており、プロキシ操作コントラクトのメソッドは、サービス参照が追加されるとそれに応じて装飾されます。ただし、サービス クライアントは、対応する操作を呼び出すときに例外を取得します。
一方向の操作で、Action='' の null 以外のメッセージが返されました
SoapUI を使用すると、バス上のメソッドを正常に呼び出すことができ、ボディが空の SOAP エンベロープが返されます。バス関係者によると、これは SOAP 仕様によるものです。
(SOAP 仕様、4.7.9 章、一方向操作):
一方向の操作を実行するときに HTTP を使用する方法については、さまざまな解釈があります。
R2714一方向の操作の場合、インスタンスはエンベロープを含む HTTP 応答を返してはなりません。具体的には、HTTP 応答のエンティティ ボディは空にする必要があります。
R2750 コンシューマーは、一方向の操作で HTTP 応答メッセージで運ばれるエンベロープを無視する必要があります。
R2727一方向の操作の場合、CONSUMER は成功した HTTP 応答ステータス コード (つまり、2xx) を、メッセージが有効であること、または受信者がそれを処理することを意味するものとして解釈してはなりません (MUST NOT)。
私の WCF クライアントは R2750 に準拠していないようです。
プロキシの操作コントラクトを強制的にIsOneWay = falseにすると、すべてが機能することがわかりました。
WCF が一方向の操作を処理する方法に何か問題がありますか、それとも何か間違っていますか (可能性が高いですか)? 他にすべきことはありますか?生成された WCF プロキシ クライアントをオーバーライドするのは適切ではないようです。
提案をありがとう。