| | | MTS组件的创建过程 | | 2001-01-26·
·lostall··COM集中营
| 上一页 1 2 3 看看这样的调用顺序:
a.创建组件 b.Advise建立连接 c.调用组件某个方法 d.断绝连接,释放组件
跟踪发现,在调用Activate时连接点并未建立,而调用组件的方法一时连接点已经建立了。这说明了在真正调用组件的方法时组件才被创建,所以b没有效果,所以当调用Activate时不能使用连接点。当调用Activate结束后,再真正的建立起连接关系。执行d释放组件时,如果组件具有池特性的话,组件并没有真的被释放,而是放到了对象池中,下次再创建时就直接从池中取出。因为连接先于释放断掉,所以COM+调用Deactivate()时也不能再利用连接点了。
6。COM+中每个软件包都是个应用程序,都是一个进程。可以设置是否在空闲时也启动服务器进程,或者闲置几分钟就关闭服务器进程。要注意的是,启动一个服务器进程是非常慢的。可以在Component Service中改变应用程序的这一设置,观察它的运行状态,以及不断的创建组件来体验创建速度与服务器进程是否处于运行中的关系。可以发现,若服务器进程在运行,则创建非常快,否则苈?br> MTS组件的用法与COM+中的相关部分几乎是一样的,也许有一些细节不同。有的书上说MTS2.0不支持对象池特性,MTS组件只能是Aparment型的。我没有试过,不过COM+中如果组件要支持对象池的话,最好是Free或Neutral型,因为可能会有不同线程类型的客户来使用它,这样效率较高。也有的书上说必须不能是Aparment型,但我做的试验似乎并非如此。另外组件的创建过程也不一样,COM+中重写了COM基础设施,包括CoCreateInstance。创建时COM+要先判断组件是否在COM+目录中注册,既是否在Component Service中加入到一个Application中。如果注册了的话就启动Dllhost.exe,并在它里面创建组件。MTS显然不会是这样,估计是在组件的AppID中设置了代理为mts.exe,这才启动mts.exe作为代理。我觉得既然COM+已经出来了,MTS慢慢地也就要退出历史舞台了,所以一切都应以COM+为准,MTS不管它也罢。 上一页 1 2 3 | | | 感谢
访问天极网,如果您觉得该文章涉及版权问题,请看这里!
|
|