そのため、WCFを介してエンティティを送信しています。私がやりたいのは、エンティティが通過する前に、私が望む方法でエンティティを変更する機会を持つことです。WCFでこれを行う必要はありませんが、1つの場所で実行したいので、別の場所で実行することはできません。
誰かがそれをする別の方法を持っているなら、しかし提案にオープンです:)
DAL、ドメイン、サービスの通常のレイヤーがあります。それらはすべて共通点も共有しています。
メッセージインスペクターについて話していると思います
メッセージ インスペクターは、サービス モデルのクライアント ランタイムおよびディスパッチ ランタイムでプログラムまたは構成を通じて使用できる拡張オブジェクトであり、メッセージの受信後または送信前にメッセージを検査および変更できます。
このサンプルは、一連の構成可能な XML スキーマ ドキュメントに対して着信メッセージを検証する、基本的なクライアントおよびサービス メッセージ検証メカニズムを実装します。このサンプルは、各操作のメッセージを検証しないことに注意してください。これは意図的な単純化です。
また、IParameterInspectorを調べてください。ここでは、クライアント側とサーバー側ですべての入出力パラメーターを処理できます
あなたが求めていることを正しく理解できたかどうかはわかりませんが、試してみます。
データ転送オブジェクト(DTO)を探しているのではないかと思います。サービスに送信する前に、エンティティの必要なすべてのデータを DTO に入れることができます。その後、サービスは含まれているデータの処理を行い、別の DTO をクライアントに送り返します。
このようにして、DTO の構造と、サービスとクライアントが実際に必要とするデータの種類を完全に制御できます。
Jen Hの答えを拡張する:
メッセージを検査し、既にシリアル化された結果を逆シリアル化するオーバーヘッドに対処する代わりに
、データベースから結果を取得した後、それらをクライアントに返す前に、カスタマイズ ロジックを実行するだけで済みます。それを行う1つの方法を以下に示します
public interface IDataTransferObject
{
void CustomizeMeSomehow();
}
[DataContract]
public class MyDataTransferObject : IDataTransferObject
{
public void CustomizeMeSomehow()
{
//Your custom logic here..
}
}
public class MyService
{
public List<MyDataTransferObject> GetObjects()
{
List<MyDataTransferObjects> items = Repository.RetrieveResults();
foreach (var item in items)
item.CustomizeMeSomehow();
return items;
}
}