2011-12-07 9 views
0

AppDomainの境界を越えてインターフェイスを共有する方法はありますか?つまり、共有インターフェイスを使用して、プロセス内の別のAppDomain内のインスタンスを参照できますか?私は名前付きパイプでWCFを使うことができることを知っていますが、オブジェクト指向のやり方でより直接的(そしてより簡単に)通信する方法があるのだろうかと思います。AppDomains全体の通信

+0

あなたは良いol '.NET Remotingを探しています。 – leppie

+2

同じプロセスであれば、完全な吹き飛ばしのリモーティングは必要ありません。ちょうどMarshalByRefオブジェクトとAppDomain.CreateInstanceAndUnwrapはそのトリックを行います。 – Jeff

答えて

2

2つ目のAppDomainを作成し、MarshalByRefオブジェクト(おそらくはインターフェイスを継承するオブジェクト)をAppDomain境界に渡すことができます。簡単な例はここにある:例ではそう

http://msdn.microsoft.com/en-us/library/3c4f1xde.aspx

AppDomain ad = AppDomain.CreateDomain("New domain"); 
    Worker remoteWorker = (Worker) ad.CreateInstanceAndUnwrap(
     Assembly.GetExecutingAssembly().FullName, 
     "Worker");   

remoteWorkerは、 "新しいドメイン" のインスタンスです。呼び出し元ドメインの変数remoteWorkerは、実際には他のアプリケーションドメインの実際のインスタンスへの呼び出しをマーシャリングするTransparentProxyです。

+0

AppDomainsはメモリ空間を共有しませんが、そうですか?これをAppDomainの境界を越えた相互通信の方法として使いたいと思っているからです。このメソッドは、単純にローカルヒープにインスタンスを作成するか、それとも境界を越えてインスタンスを作成しますか? – Jordan

+0

CreateInstanceAndUnwrapは、ターゲットドメイン内(境界を越えて)にインスタンスを作成し、呼び出し元ドメインのTransparentProxy参照を提供します。 – Jeff

+0

素晴らしいです、ありがとうございます。それがまさに私が必要としていたものです。私がインターフェイス型の方法で共有型を渡すと、それがシリアル化されるか、または参照渡しされます。私がAppDomainsを初めて熟知していれば、私は新しいことです。 – Jordan

関連する問題