私はWCFサービスと彼のクライアントを書いています。サービスとクライアントの間で、カスタムクラスのオブジェクトを送受信したい。
私は3つのモジュールを持っています
WCFサービスとクライアントの両方に、共通のクラスライブラリへの参照があります。すべてのクラスをDataContract属性でマークしたくありません。
それで、私の質問「DataContract属性はWCFに必要ですか?」
.NET4とnetTcpBindingを使用しています。
正しく思い出せば(IIRC)、正式なデータコントラクトマーカーを使用しないと、デフォルトでフィールドシリアライザーのように動作します。これは機能しますが、プライベートな変更によってクライアント/サーバーが破損する可能性があるため、バージョン管理は簡単ではありません。 IMOは、常にWCFタイプをdata-contract/data-member属性で正式に装飾する必要があります。それらがなくても機能しますが、理由が間違っています(IIRC、元々はしませんでした正式なマーカーなしで機能します)。
「DataContract属性はWCFに必要ですか?」
技術的にはありません。これは、DataContractSerializerを使用するかどうかによって異なります(これは多くのバインディングのデフォルトです)。
他のオプションがあります:
WCFでは、いくつかのシリアル化手法を使用できます。これは、WCFに関する優れた適応性の1つです。見てください:
DataContract属性を使用する必要はありません。サービスは、DataContract属性がなくても問題なく機能します。
そうは言っても、あなたのサービスとクライアントにクラスライブラリを共有させることが最良の設計アプローチであるとは本当に思いません。 DataContractsを介してタイプを公開すると、はるかに明確になります。
いつか誰かがあなたのサービスを利用したいが、共有クラスライブラリにアクセスできない場合はどうなりますか?