WSTransfer の実装を作成しようとしています (Roman Kiss が既に WCF 用に作成していることは認識していますが、実際には仕様を満たしていません)。
WSTransfer は疎結合であるため、サービス コンタクトのデータ コントラクトを放棄することになりました。そのため、各作成メッセージは Message Create(Message request) のようになります。
これは問題なく動作し、応答を返すまではすべてがうまくいきます。
私が抱えている問題は、WSTransfer 応答が構築される方法にあります。create を例にとると、応答は次のようになります
<wxf:ResourceCreated>
<wsa:Address>....</wsa:Address>
<wsa:ReferenceProperties>
<xxx:MyID>....</xxx:MyId>
</wsa:ReferenceProperties>
</wxf:ResourceCreated>
ご覧のとおり、応答メッセージ内には 3 つの異なる XML 名前空間があります。
さて、関与するのは簡単です。(公開していなくても)、データ コントラクトを作成し、値を設定して、それを起動することができます
Message response = Message.CreateMessage(request.Version,
"http://schemas.xmlsoap.org/ws/2004/09/transfer/CreateResponse",
resourceCreatedMessage);
ただし、応答内の子要素に異なる名前空間を設定すると問題が発生します。WCFのデータコントラクトはこれを行わないようです。使っても
[MessageBodyMember(Namespace="....")]
応答クラス内の個々の要素に変更が加えられていないように見える場合、すべてがコントラクト クラスに指定された名前空間の一部になります。
では、WCF メッセージ内の個々の要素に異なる名前空間を適用するにはどうすればよいですか。契約を介して、または他のジガリーポーカーを介して?