请各位广施援手!关于COM+线程模型的问题,真的没人懂吗? (0分)

  • 主题发起人 主题发起人 特尔斐
  • 开始时间 开始时间

特尔斐

Unregistered / Unconfirmed
GUEST, unregistred user!
为了提高应用服务器同时服务多客户的效率,我将COM+的线程模型设为Neutral,并启用对象池功能。但是,有一部分COM+组件会在客户端访问服务器时出现以下错误:
“分布式事务已完成。请将此会话登记到新事务或 NULL 事务中”
其中,对象池的设置为 最小池大小:0 最大池大小:100
如果将[事务支持]设为“支持”(原为“需要”),[同步支持]设为“支持”(原也为“需要”),则不会出现上面的错误,但取得(或提交)的数据会出莫名其妙的问题。
但只要不启用对象池,则一切正常。
这是为什么?
200重谢帮我解决此问题的大侠!
 
这个偶还没碰到过耶~
研究先,再做答 :)
 
多谢佛爷,总算有人应了一下。
唉,大富翁怎么了?都不热心助人了,不要看是0分贴,只要解决了问题,要多少分都行。
 
没人帮忙[:(]
自己研究,总算有一点眉目了。
 
不好意思,总是碰不到你说的那种情况 :(
能否拿出来共享共享 :)
 
我也是有的组件会,有的组件不会。如果做一个演示组件(只有简单的数据库存取)是没有一点问题。但我把所有的业务处理代码加上去时,就会出问题。
我还没有完全解决啊。
 
正在学,刚从书上看到的,抄给你
对可入池对象的要求
1.无状态
2.无线程紧密性(限于MTA,TNA(Neutral),Both),不能聚合
3.可被聚合(aggregatable)
4.参于事务的可入池对象必须关闭对受管理资源的自动利用(automatic enlistment of manged resources),即必须手动设置事务性资源.
(参照MSDN COM+ Technical Series:Object Pooling)
 
to sz1008:
谢谢你的参与,但你说的这四点我早已照做了,且可以使用对象池,但有一组件会出上面的错误。
 
to 阿西喊佛:
你的不出这个错误吗?你在客户端将一个连接应用服务器的TClientDataSet组件先Close再Open,就会出了。
 
终于上来了,我作了一下,也没有错阿
 
不会吧,我这里如果DataSetProvider允许客户端改变CommandText的话,用如下代码:
with cdsMaindo
begin
Close;
CommandText := sCmdText;
Open;
end;
如果sCmdText与原来的CommandText相同的话,也会出错。
还有,你在客户端调用FetchParams试试,也出错。
 
我晕~
这样的错误偶还是真的不会出耶~
一般来说,偶自己写中间层逻辑,然后close,调用appserver,再open。
只要中间层没写错的话那么不会出现你的那个错误~
 
呵呵,老佛爷,您别晕了,真的偶尔会出现这个问题(Neutral线程模型且启用Object Pooling,且事务支持为[需要]),同样的代码如果不启用对象池或事务支持为[支持]的话一点问题都没有。现在已经解决了这个问题,谢谢各位。
 
替你难过,呵呵,下次若偶碰到这个问题有人可以帮偶解答了 :)
 
呵呵,没什么可难过的,俺技不如人而已。好在总算解决了。[:D]
 
呵呵,又是这么晚 :)
对了,bbs.52top.com里面的那个特尔斐也是你吧 :)
 
哈哈,每天都这样,惯了。
是啊,也是我。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部