为何COM+每调用一次,就CREATE一次??? ( 积分: 50 )

  • 主题发起人 主题发起人 hubeizwj
  • 开始时间 开始时间
H

hubeizwj

Unregistered / Unconfirmed
GUEST, unregistred user!
本人原认为:COM+服务,
客户端执行SockectConnection.Connected=true, 服务器事件: MTSDataMoudule.OnCreate 执行一次 ,
后来调试:发现只要客户端调用其中的任何方法,都会引发MTSDataMoudule.OnCreate 事件.
本人想在这个事件中.清除所有的连接,当login成功,才赋予连接,所以就实现不了,
每次调用COM+,在CREATE事件中它就清除了所有的连接,导致"没有连接串"错误,
请问大侠:COM+中怎样作才行,当然不要用每次调用前,先LOGIN,那样的话,多作了很多事,
耗费资源
 
将服务器COM对象的线程模式改成tmBoth或tmNeutral,同时启动对象池即可
 
本人用的就是tmNeutral
TComponentFactory.Create(ComServer, TEConnect,
Class_EConnect, ciMultiInstance, tmNeutral);
且在组件服务器中设置启用线程池:
最小池大小:0
最大池大小:1048576
创建超时:60000 ms
但就是不行,为什么??
 
设置启用线程池是在WIN2000的组件服务中设置,还是在DELPHI中的COM+选项中设置?我两个都试了,还是一样不行
 
COM+ 应该是无状态的,使用完就放了.
如果客户端调用其中的任何方法,都会引发MTSDataMoudule.OnCreate 事件.看看客户端调用方法时是不是每次都创建一次??如果是,在客户端保存一个服务端的上下文引用即可.
 
lifencheng, 如何在客户端保存一个服务端的上下文引用 ?........
 
真急人,怎么没有人回答????
 
晕了,..没人答
 
只要客户端请求连接,服务器的DATAMODULE都会触发一个ONCREATE事件的。
为什么要清除所有连接呢?如果Login不同意,关闭客户端不就停止连接了吗?如果Login通过,也不需要再次创建连接呀,直接使用此连接不就OK了吗?
如果你是要实现Login窗口,我的实现方法是在Login窗口中单独使用了一个SocketConnection,当Login通过时,这个Login窗口也就释放了,相应的SocketConnection也中断了,取而代之的是主程序的SocketConnection。方法有点笨,见笑了
 
LeonSu,我之所以要这样作就是为了安全,因我的服务器在广域网中,但DELPHI的应用程序有只要被知道了IP与端口号就可以在客户端的ProviderNAME处找到服务,威胁服务的安全性;
 
是哟,是有可能产生DDOS攻击的。改端口也不是很好的解决方法
 
请高手提议
 
后退
顶部