コンストラクタの戻り値を変更する
やるべきことは、Invoke() の戻り値の ReturnValue を MethodLogger の生成した proxy にすることです。ここまでの動作を見ると、CreateInsntance() によって取得された proxy はコンストラクタを呼び出すために利用されるが、new した結果のオブジェクトは Invoke() の ReturnValue を利用される、ということだからです。
実装については、前述の高度なリモート処理のトピックで触れられているため、すぐに行うことができます。
IConstructionCallMessage ctor = req as IConstructionCallMessage; if (ctor != null) { return EnterpriseServicesHelper.CreateConstructionReturnMessage( ctor, this.GetTransparentProxy() as MarshalByRefObject); }
コンストラクタ呼び出しを引数にうけてくれるので、とりあえず InitializeServerObject() を削ってみましたが、見事に最初の Invoke() で target が初期化されていないままなので、メソッド呼び出しを実行することができませんでした。