私は、大量のデータを送受信する WCF サービスでカスタム シリアル化を実装する任務を負っています。
MSDN でこの例を確認して解決策を見つけました。作成者は、サービス コントラクトのシリアル化属性を作成し、各データ コントラクト クラスにシリアル化インターフェイスを実装しています。
私はこのアイデアが好きですが、この例では、メイン スレッドでプロキシ チャネルを起動してデータを取得させることで、プロジェクトの正しさを示しているだけです。私のクライアントは別のアプリケーションとして構築されるため、シリアル化属性とデータ コントラクトを継承する方法が複雑になります。
シリアル化属性とデータ コントラクトを独自のライブラリに移動し、サービス プロジェクトとクライアント プロジェクトの両方に参照を含めて、両方で使用できるようにしました。クライアントがサービスを参照するために生成されたコードで、サービス コントラクト/インターフェイスに属性を追加し、クライアント側でシリアライゼーションが十分に機能することを確認しました。
この問題を解決するよりエレガントな方法はありますか? メタデータを介してカスタムのシリアル化を伝える方法はありますか? 方法があるとは思いませんが、WCF プログラミングは初めてです。現在の設計が最善の方法ではないのではないかと心配しています。また、私の目的により適した WCF テクノロジが存在する可能性もあります。さらに、.NET フレームワーク外のアプリケーションからこのサービスにアクセスする必要がある場合、私のシリアル化ライブラリは役に立ちません。
また、私のアプローチは、データ コントラクトを宣伝するサービスの要点全体を無効にしていることにも気付きました。サービスと通信するすべてのクライアントは、メタデータのデータ コントラクトを無視し、共通ライブラリにあるクラスを使用する必要があります。クライアントがこの共通ライブラリを認識していない場合、試行した操作コントラクトに対してエラーと null 値が返されます。
私の質問が他の場所で回答されている場合は申し訳ありませんが、これまでのところ、特定の設計上の質問に対処するものは見つかりません.