1つの操作を公開する単純なWCFアプリケーションを作成しました。この操作は、複合データ型をパラメーターとして受け取ります。
この複合データ型を[DataContract]属性で装飾していません。しかし、これは機能しており、WSDLでこのスキーマを確認できます。
私の理解では、この新しいカスタムタイプは、Webサービス操作に参加するために[Serializable]または[dataContract]属性で装飾する必要があります。
私がここで欠けているものは何ですか?
1つの操作を公開する単純なWCFアプリケーションを作成しました。この操作は、複合データ型をパラメーターとして受け取ります。
この複合データ型を[DataContract]属性で装飾していません。しかし、これは機能しており、WSDLでこのスキーマを確認できます。
私の理解では、この新しいカスタムタイプは、Webサービス操作に参加するために[Serializable]または[dataContract]属性で装飾する必要があります。
私がここで欠けているものは何ですか?
POCOサポートは.NET3.5SP1以降WCFで導入されており、オブジェクトを属性で装飾する必要がなくなりました。パブリックプロパティは自動的に公開されます。これらの属性で明示的にマークすることをお勧めしますが。[DataContract]
[DataMember]
ダリンが言うように、sp1は推測されたデータコントラクトのサポートを導入しました。マーシャリングされたタイプがパブリックタイプであり、DataContract
属性で装飾されていない場合、WCFはそのような属性を自動的に推測しDataMemeber
、そのタイプのすべてのパブリックメンバーに属性を適用します。
彼の著書「ProgrammingWCFServices」の中で、JuvalLöwyは次のように述べています。
私の意見では、推測されたデータコントラクトに依存することは、WCFの他のほとんどすべての粒子に反するずさんなハックです。... DataContract属性を使用し、データコントラクトについて明示してください。これにより、バージョン管理などのデータコントラクト機能を利用できるようになります。