MarshalByRefObjectの主な用途は何ですか?


回答:


107

リモーティング; つまり、オブジェクトをシリアル化して転送するのではなく、AppDomain間またはマシン間では、オブジェクトは一方の側にとどまり、プロキシがもう一方の側に作成されます。プロキシへのすべてのメソッド呼び出しがインターセプトされ、呼び出しがRPC wikimsdnとして送信され、メソッドが他のマシンで実行されます(通常、引数と戻り値をシリアル化します)。

注:これにより、予期しない「チャット」インターフェースが発生する可能性があります。オブジェクト/プロキシ/ RPCアプローチは、明示的なサービス境界を持つアプローチよりも望ましくありません。マイクロソフトは現在、リモーティングではなくWCF wikimsdnを推奨しています


5
@pavel-かなり複雑ですが、少なくとも、高価な呼び出しがどこにあるかは明らかです。帯域幅を意味する場合、それを軽減する方法があります。
マークグラベル

1
時には、あなたはありませんしたいなどのためにリストされたシナリオのように、明示的な境界、processdomain.codeplex.comは、代わりにあなたが透明性を求めています。
Andrew Savinykh 2014年

1
c#では、すべての参照型は参照のデフォルトまたはそれをどのように知るかによってマーシャルされます。それがばかげた質問である場合は申し訳ありません。この概念で新しくなったものです@MarcGravell
Ehsan Sajjad

1
@Ehsanいいえ、デフォルトでは、val-by-valです。ただし、マーシャリングはアプリドメインの境界を越えた場合にのみ適用されるため、関連性があることもまれです。参照によるマーシャルになるには、MashalByRefObjectを継承する必要があります
Marc Gravell

28

のもう1つの重要な用途MarshalByRefObjectは、リモートシンクチェーンを介してAOPを実装することです。

ContextBoundObject(それ自体がから派生するMarshalByRefObject)から派生するオブジェクトがある場合、同じAppDomain内の別のコンテキストでインスタンス化し、オブジェクト間の通信にRemotingプロキシシステムを自動的に経由させることができます-カスタムシンクをRemotingシンクにプラグインできます-鎖。

これにより、最終的にオブジェクトへのメソッド呼び出しを「装飾」し、ロギングやセキュリティなどの分野横断的なサービスを実装することができます。


これらについて考えてみてください-MBRオブジェクトへのそのようなメソッド呼び出しをどのように装飾できますか?これらの装飾はパフォーマンスの点でコストがかかりますか?
SO19

9

基本的な用途は、2つのアプリドメイン間のオブジェクトへのアクセスをサポートすることであり、これらのアプリドメインは、リモート経由で同じコンピューター上または異なるコンピューター上に配置できます。

こちらをご覧ください


5

呼び出し元アプリケーションのアプリケーションドメイン外のオブジェクトは、リモートオブジェクトと見なす必要があります。MarshalByRefObjectクラスから派生するリモートオブジェクト。から派生させることで、任意のオブジェクトをリモートオブジェクトに変更できますMarshalByRefObject。継承しないオブジェクトMarshalByRefObjectは、リモート不可オブジェクトと呼ばれます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.