コンストラクタの戻り値を変更する

やるべきことは、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 が初期化されていないままなので、メソッド呼び出しを実行することができませんでした。