2011-06-05 23 views
11

別のappdomain(paramを渡して結果を得る)でobjectのメソッドを呼び出す必要があります。アイデア?クロスappdomainを呼び出す最も簡単な方法は?

UPD両方のAppDomainが私のコードで作成されていません(ホストアプリケーションで作成され、コードが呼び出されます)。あるAppDomainへのアクセス権を他のAppDomainから得る方法はありますか?

答えて

14

他のドメインにオブジェクトを作成した場合など、 AppDomain.CreateInstanceAndUnwrapとすると、別のドメインのオブジェクトを呼び出すだけで、オブジェクトのメソッドを呼び出すことができます。

アプリケーション間ドメインの呼び出しを行う最も簡単な方法は、別のドメインに存在するそのプロキシ経由で別のドメインから実際に公開されているそのオブジェクトを直接呼び出すことです。

UPD
残念ながら、ホストドメインを取得することは簡単ではありません。あなたはthisのようなドメインを列挙し、その中にホストのものを見つけるべきです。あなたのホストドメインが、AppDomain.IsDefaultAppDomainというメソッドがの返信先であると仮定します。

+0

私はその方法について忘れてしまった。実際にDoCallBackを使うよりもはるかに便利です;) –

+0

Nice!この方法でコールバックを行うことは可能ですか? – user626528

+2

@ user626528はい、オブジェクトの1つのメソッドに対するコールバックだけではありません。別のドメインにオブジェクトを作成すると、そのドメイン内のすべてのメソッドが呼び出されます。あなたのコールバックを担当するクラスを作成し、 'AppDomain.CreateInstanceAndUnwrap'を介してそのクラスのインスタンスを別のドメインに作成し、最後に他のドメインのインスタンスのメソッドを呼び出す必要があると思います。 – Centro

3

これは通常AppDomain.DoCallBackを使用して実現されます。パラメータを渡す場合は、シリアライズ可能なオブジェクトを作成する必要があります。そのメソッドは、上記のメソッドに渡します。 コールバックメソッドでは、別のAppDomainコールバックを実行して、結果を元のAppDomainに戻すことができます。

+0

パラメータ/結果を渡す方法がわかりません。 – user626528

+1

@ user626528パラメータを渡すことも、結果を直接取得することもできません。あなたは[SetData](http://msdn.microsoft.com/en-us/library/system.appdomain.setdata.aspx)と[GetData](http://msdn.microsoft.com)を使用することができます。アプリケーションドメインの/en-us/library/system.appdomain.getdata.aspx)メソッドを使用します。 – Prasad

関連する問題