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进程了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端