2011-10-29 3 views
0

ホストA、B、およびCの3つのケースがあります。ホストCは定期的にホストBにハートビートメッセージを送信し、ホストBは同様のハートビートメッセージをAに送信します。 Cで送信されたパケットの情報といくつかの追加情報。明らかに、これを可能にするために、AはBにサービスを公開し、BはCにサービスを公開する。異なるサービス間のオブジェクトの中継

両方に渡される直列化可能なクラスはNodeInfoと呼ばれる。基本的にデータメンバーの単純なコレクションであるNodeInfoは、AとBの両方のサービスのサービス定義によって参照されます。

ここにキッカーがあります:Bが受け取ったデータ契約のタイプはB.ServiceForC.NodeInfoです。しかし、BがAにリレーする必要があるタイプは、タイプA.ServiceForB.NodeInfoです。だから私がしなければならないのは、Bに反復コードをたくさん書くことで、インバウンドNodeInfoのデータを新しく作成されたアウトバウンドNodeInfoのものにコピーすることです。

私の質問は、これを扱う巧妙な方法はありますか? B.ServiceForC.NodeInfoオブジェクトをA.ServiceForB.NodeInfoオブジェクトにキャストする方法はありますか?すべてのオブジェクトを再作成してデータをコピーする必要はありませんか?彼らは遺伝的な意味で関連していないので、それは可能ではないようですが、わかりません。

私は多くの狩りをしましたが、役に立たないものは見つけられません。どんな提案も、たとえそれが決定的な "あなたが幸運だ"と言っても、助けになるだろう。ありがとう。

答えて

1

デフォルトでは、WCFはサービスインターフェイスのクライアント側のコピーを生成し、プロキシコードで使用される名前空間をラップします。しかし、あなたはこれのようにする必要はありません。サービスインタフェースをlib/dllに入れる - WCF生成のプロキシコードからWCF生成のインタフェースを削除し、代わりにlib名前空間のインタフェースを使用してください。
このようにすれば、すべてあなたのlib/dllで定義されているMyLibNamepace.NodeInfoインターフェイスを使用できます。
共通のコード用の既存のlib/dllをまだお持ちでない場合は、独自のインターフェース定義を各アプリケーションに直接コンパイルすることもできます。

1

これらのホスト間で共有され、自動的に生成する代わりにDataContractを保持するクラスライブラリを作成します。

3つのコードすべてのソースコードにアクセスできない場合は、AutoMapperを使用できます。

関連する問題