2004-10-22から1日間の記事一覧
InitializeServerObject() の呼び出しを加えて、 IConstructionCallMessage ctor = req as IConstructionCallMessage; if (ctor != null) { this.InitializeServerObject(ctor); return EnterpriseServicesHelper.CreateConstructionReturnMessage( ctor, th…
やるべきことは、Invoke() の戻り値の ReturnValue を MethodLogger の生成した proxy にすることです。ここまでの動作を見ると、CreateInsntance() によって取得された proxy はコンストラクタを呼び出すために利用されるが、new した結果のオブジェクトは …
コンストラクタ以降のメソッド呼び出し等が Invoke() にわたって来ないため、どうも InitializeServerObject() によって本物のインスタンスを返してしまっているようです。 対象のオブジェクトが実インスタンスなのか、TransparentProxy なのかは、RemotingS…
CreateInstance() の修正が終わっても、まだ new の処理はおわりません。 やっと stub の Invoke() に処理がやってくるのですが、最初の一発は new した直後に呼ばれるメソッド…、当然コンストラクタの呼び出しです。 コンストラクタと他のメソッドの大きな…
上記のコードでは、正常に実行できません。 base.CreateInstance() で手に入ったオブジェクトに対して GetType() を呼び出すと「コンストラクタ呼び出しが進行中にプロキシを呼び出そうとしました。」と怒られて終了してしまいます。 ProxyAttribute のドキ…
というわけで、上記のトピックを読めばやることはもうわかってしまうと思いますが、話を単純にすると、やるべきことは new の乗っ取りです。 乗っ取られるクラスは ContextBoundObject の派生クラスであるほかに、ProxyAttribute の派生クラスを属性として保…
まずは、SDK の解説を読む必要があるわけだが、ContextBoundObject クラスから入っていくと、はっきり言って意味不明に近い解説が書いてあると思ってしまう人が多いのではないだろうか。 メソッドは何も増えていないし、説明はわけわからない。関係あるクラ…
元々、Object 派生クラスは、外部からのメソッド呼び出しを解決する処理に対して割り込むことができなかった。*1 これは MarshalByRefObject を派生元クラスにすることで解決し、CLR が OOP のメッセージ送受信を IMessage と Invoke() を利用した形にして、…
ということは、自分自身の呼び出しを自分自身ではない別のスタブへリダイレクトしたら? public static MarshalByRefObject Attach(MarshalByRefObject o) { Trace.Assert(o != null); MethodLogger stub = new MethodLogger(o); MethodLogger proxy = new M…
メソッド呼び出しを RemotingServices.ExecuteMessage() や MethodInfo.Invoke() を利用して行う場合、this として proxy を渡すことができないだろうか? というところで終わっていました。 しかし、そんな簡単に事が済んだら苦労はしません。 RemotingServ…
今週も土日出社&帰宅0〜1時とか、明らかに時間足りてないとか、体調に影響が出始めてるとか、良い事なし状態です。しかし、いい加減に MethodLogger の残りを終わらせましょう。 書くほどのことは少ないしね。