4

WCF を使用して、SOAP 1.2 over HTTP を受け入れる Web サービスを実装しようとしています。action残念ながら、HTTP ヘッダーの一部としてパラメーターを送信しないレガシー クライアントを使用する必要があります。これは WCF で問題を引き起こしているようで、(少なくともデフォルトでは) action.

に基づいてバインドを作成しましたBasicHttpBindingが、にMessageVersion設定するとMessageVersion.Soap12、WS-Addressing を使用する必要がなくなると思いました。

次にオーバーロードApplyDispatchBehaviourして、SOAP 本文の内容に基づいて正しい操作を選択するカスタム実装にIContractBehavior設定します (基本的に、この MSDN 記事で使用されているアプローチ) 。DispatchRuntime.OperationSelectorIDispatchOperationSelector

デフォルトでは、これは機能していないようでSelectOperation、リクエストが行われたときに関数は呼び出されません。

ただし、次のように、空のアクションを含むダミー操作をコントラクトに追加すると、次のようになります。

[OperationContract( Action = "" )]
void DoNothing();

その後、突然SelectOperation呼び出され始め、私のコードは期待どおりに機能します。WCF でアクション ヘッダーを不要にすることに失敗したようです。操作に直接マップするために使用されているアクション ヘッダーを停止しました。ただし、コントラクトは .wsdl ファイルから生成されるため、機能させるためにそれを編集するのは非常に大きなハックのように思えます。

私の質問はこれです: WCF を使用して、アクション ヘッダーなしで SOAP 1.2 要求を受け入れるにはどうすればよいですか? 私が間違っていない限り、SOAP 1.2 仕様はアクション ヘッダーを必要としないので、コントラクトをハッキングすることなく WCF でこれを実装する方法は確かにありますか?

4

1 に答える 1