私の WCF サービスは、サービスへの共通のエントリ ポイントを表すために、キャッチオール アクションと応答アクションでマークされた単一の操作をエクスポートします。
[ServiceContract]
public interface IService
{
[OperationContract (Action="*", ReplyAction="*")]
Message MyMethod (Message msg);
}
クライアント プロキシは引き続きデータコントラクトとして生成されます。
しかし、私が見つけたのは、クライアントがデータ コントラクトを送信しているにもかかわらず、シリアル化されている場合、本体はデータ コントラクト自体ではなく、データ コントラクトとmsg
同等のメッセージコントラクトのように見えるということです。
内部のデータ コントラクトを抽出するには、受信した XML を手動で解析する必要があることを除けば、これでも問題ありません。サービス自体には使用する実際のMessageContract
型がないため、本体にアクセスすることは、ノードの抽出、要素の再ラベル付けなどを意味します。これは、公開された操作がMessage
ベースではない場合に、おそらく WCF が隠れて処理しているものの手動プロセスです。
データ コントラクト間のデータ コントラクトの場合、WCF はどのようにこれを行うのですか? 同じプロセスを使用できる方法はありますか?