Windows 2003 中DTC的怪事情

最近在做一个asp.net应用需要分布式事务,我选择了COM+ 1.5,利用DTC进行分布式事务协调
可是当我的asp.net应用程序如果在几十分钟内没有人访问(调用分布式事务),这时如果再去调用就会失败,
一般情况下 Exception message是:MSDTC 事务的导入失败: Result Code = 0x8004d00e。
Method: Void OnError(System.Data.SqlClient.SqlException, System.Data.SqlClient.TdsParserState)
这时如果还不死心再去调用一次,就发现:发生在该数据库上的不要分布式事务的调用也有问题
具体异常是:Message: 当前命令发生了严重错误。应放弃任何可能产生的结果
Type: System.Data.SqlClient.SqlException

没有办法我更新web.config文件,导致应用程序重起,分布式事务就好了!!
可是如果再过几十分钟,同样的事情还会发生,真不知道,那里出问题了
如果这时,我不修改web.config,而是就等待30分钟(大约),分布式事务又可以跑起来了
感觉好像和ConnectionPool有某种关系


另外一个比较疑问的是,在perfomance monitor中看到的:
SqlClient: Current # connection pools 139
SqlClient: Current # pooled connections 72
SqlClient: Current # pooled and nonpooled connections 72

当我把w3wp重起,这些connection并不会丢失,如果这时再访问数据源,连接数就在原来的基础上增加 ,SqlClient: Current # connection pools数字也会增加。我就纳闷,这些连接是保存在那里的,CLR runtime中吗?如果是,那w3wp是Runtime的host,host都没有了,连接怎么还能存在呢?
我知道这些连接是物理的连接,可是也要进程保持这些连接才行,难道还有别的进程在保存这些连接吗?

如果重起启动物w3wp进程,连接不会断掉,那我的应用程序还能继续使用这些pooled的连接吗?感觉好像不能,如果不能,如何把他们断掉?

刚才看了一下msdn上的文章,说connection pooling 是和Appdomain相关的,如果appdomain退出了,则connectionpool也就不存在了,那我的connection pooling怎么这么大?我已经重起好几次w3wp进程了

 

posted on 2004-06-26 21:08  coollzh  阅读(4473)  评论(11编辑  收藏  举报

导航