我沒有用過ASP, 也不確定你問的問題, 愛莫能助
當在COM方法中要結束前, 如果有調用到SetComplete或SetAbort時, 方法調用完成後
目前COM的實例將會交回給MTS;
而當下一次調用同一接口的方法時, MTS會再配置一個
新的實例, 來執行調用的方法;
在此情況下, 因為每次執行調用的實例都會不相同, 所以
不能將程式執行的狀態保留在此類的實例中(因為每次的實例都不一樣),所以稱此類的COM
物件為Stateless;
另有一個機制叫Object Pooling,可以用來暫存對象的對象池;
當每次
呼叫方法, 可以從對象池取出對象實例, 供調用方法;
待調用方法結束後, 再將對象實例
還給對象池;
目前MTS(2000 COM+)並沒有Object Pooling功能(XP沒有測過, 不確定);
所
以當要配置使用實例時, 必需重新建立一個新的實例, 方法調用結束,實例還給MTS後,
MTS會直接釋放掉;
OnActivate方法, 是在實例配置方法調前, 會先進入, 以便執行初始化動作;
OnDeactivate, 是在方法調用結束後, 實例還給MTS後, 會被調用到, 以便執行資源釋放
的動作;
如果在沒有Object Pooling中的MTS(COM+)中或不做stateless的COM,
初始化寫在Initialize或OnActivate, 或用Destroy、OnDeactiveate並沒有差異;
如果考慮到有Object Pooling的環境, 則應寫在OnActivate及OnDeactiveate
目前已知Application Center有支援Object Pooling功能