2009-09-02 2 views
2

In AppDomain A のオブジェクトoがあります。 TSerializableでなく、MarshalByRefObjectに由来しません。タイプTは、私がコントロールできないプラグインホストによって提供されています。MarshalByRefObjectから派生していないリモートオブジェクトへのプロキシを作成するにはどうすればよいですか?

私はAppDomain Bを作成し、oにプロキシを渡してBのメソッドに渡したいと思いますが、プロンプトを作成する方法は?

のメソッドは、oのメソッドを呼び出し、プロパティを読み取ることができるはずです。これらのメソッドの結果は、同様の方法でプロキシする必要があります。

答えて

5

私がお勧めするのは、プロキシしようとしているオブジェクトと同じインターフェイスを実装し、MarshalByRefObjectから継承する適切なプロキシオブジェクトを作成することです。その後、プロキシオブジェクトをリモートにします。サーバー側では、プロキシがオブジェクトに委任されます。

サーバーオブジェクトには、静的(すべてのクライアントが同じオブジェクトを参照)または非静的(各クライアントは新しいコピーを取得)としてオブジェクトが含まれます。

静的メンバーの場合は、サーバーでプロキシを作成してオブジェクトで初期化するか、最初の割り当て済みプロキシ(最初のクライアントが接続したとき)でオブジェクトを作成して初期化する必要があります。私は前者を使った。

もちろん、リースについては忘れないでください。

2

できません。 AppDomains間で通信する唯一の方法は、プロキシを使用するか、コピーを使用すること(つまりシリアライズ可能)です。

MarshalByRefObjectから継承するプロキシで型をラップして代わりに使用できますか?

3

あなたはプロキシをしたい場合は、あなたの最善の策は、おそらくは(プライベートフィールドとして)MarshalByRefObjectから継承ず、どれがそれを使用可能にするためのパブリックメソッドなどを持っていることをタイプ内のオブジェクトをカプセル化することです。ファサード、本質的に。

シリアル化が必要な場合は、という関連するというDTOをオブジェクトに使用しますが、別個の(シリアライズ可能な)タイプを使用します。状態を送信し、もう一方の端で実際のタイプを再構築するだけです。

+1

はい、私はファサードを考えています。 * whole * APIのファサードを作成するためのライブラリはありますか?私は現在コード生成を探しています... –

+0

私が知っていることはありません –

関連する問題