FieldGetter と FieldSetter

幸運なことに、internal method の呼び出しは RemotingServices.ExecuteMessage() でサポートされているらしく、問題なく実行することができる。
よって、問題となるのは internal field の取得に限定された。

ここで、問題解決には、Remoting と MarshalByRefObject に関する新たな情報が必要となる。
少し考えてみれば当然のことかもしれないが、proxy に対して field を読み書きすることは不可能である。
field へ直接アクセスしようとしても、proxy には該当のフィールドが存在しないため、型キャストを騙しているのと同様に、proxy の field に対するアクセスもなんらかの手段で Invoke() へ伝える必要がある。
このため、MarshalByRefObject クラスとその派生クラスの field にたいしての読み書きは、実際には Object.FieldGetter() と Object.FieldSetter() というメソッド呼び出しとして扱われている。*1
メソッド呼び出しであれば、通常通り stub の Invoke() を経由して実データを読み書きすることが可能である。

*1:これらが、なぜ MarshalByRefObject のメンバではないのかは不明だが興味がある