2

さまざまなクラスを公開するWCFがあります。一部のプロパティにDataAnnotation属性を適用しました。

コンシューマープロジェクトでも生成してほしいのですが、これを行う方法はありますか?

4

1 に答える 1

3

いいえ。WCFはメッセージベースのシステムであるため、クライアントとサービスを接続するのは、ネットワーク上でXMLでシリアル化されたメッセージ(およびその形式)だけです。

プロキシを作成する場合、WCFランタイムで実行できるのは、データ構造を再作成することだけです。これにより、クライアント側のクラスの1つをXMLでシリアル化するときに、ネットワーク上の表現がサーバー側のクラスと同じになります。

クライアントには、サーバーの腸に「到達」して、データ注釈などの.NET固有のものについて調べる方法がありません...

つまり、通信の両端を制御する場合、たとえばサーバーとクライアントの両方を作成する場合は、別のアプローチをとることができます。

  • サービスとデータのコントラクト(コントラクトのみ)を使用して、個別のクラスライブラリアセンブリを作成します
  • サービス参照を追加する前に、サーバーコードとクライアント側プロジェクトの両方からその共通の共有アセンブリを参照します
  • サービス参照を追加すると、デフォルトでは、WCFランタイムは既存のタイプを再利用します。したがって、サービスへのサービス参照を追加し、データクラスが必要であり、MyDataそのクラスが参照される共有アセンブリに存在する場合、WCFランタイムはそれを再利用します(新しい個別のクライアント側プロキシクラスを再作成する代わりに)

この「トリック」を使用すると、サービスとクライアント間で特定のクラス(データクラスなど)を共有できます。これには、すべての.NET属性が含まれます。

于 2011-03-01T06:52:50.297 に答える