2

WSDL をサービス定義 (サービスへのインバウンド) としてインポートしていますが、なんらかの理由でクライアントがリクエストをフォーマットしているため、プロキシ クラスにMessageContract装飾がないと WCF がデシリアライズできません。

メイン コンテナー クラスに属性を追加することで、このように機能するようになりましたMessageContract。これは、WCF がこれらを部分クラスとしてビルドするため、問題ありません。つまり、パーツを装飾し、生成されたパーツをそのままにしておくことができます。ただし、メイン コンテナー クラスのプロパティを正しく逆シリアル化するにはMessageBodyMember、名前空間を指定する属性でそれらを装飾する必要があります。

これは明らかに悪いことです。つまり、WSDL から再生成するたびに、クライアントからメッセージを受信できなくなるということです。サービス参照構成で「常にメッセージ コントラクトを生成する」を既に設定していますが、それは嘘のようです。部分クラスを装飾したままにしているかどうかに関係なく、メッセージ コントラクトは生成されMessageContractません。

WCF にこれらの s を強制的に生成させる方法はありますMessageContractか?

編集

関係あるかどうかわかりませんが、svcutil がプロキシ クラスを生成するときに、プロパティを次のように装飾します。

[XmlElement(Order=0)]
//Property definition

そして、MessageContract属性を追加すると、サービスがメッセージで中断されます

パラメータまたは戻り値に対して明示的な順序付けを使用することはできません。カスタム属性から Order プロパティを削除してください。

XmlElementサービスを正常に呼び出す前に、生成された属性からすべての Order ディレクティブを削除する必要があります。

4

1 に答える 1