我已经为此工作了大约一天半的时间,并在网络上搜索了大量博客和帮助文章。我发现了几个与此错误相关的问题,但我认为它们不太适用于我的情况(或者在某些情况下,不幸的是,我无法很好地理解它们来实现:P)。我不确定我能否很好地描述这一点以寻求帮助......但这里是:
我们有一个 .NET 应用程序来跟踪我们的资源。具有导出功能,可将资源复制到时间跟踪系统和计费系统;这将访问链接到时间和计费数据库的存储过程。
我最近将计费系统数据库移至新服务器(原服务器:Server 2003 SP2、SQL 2005;新服务器:Server 2008 R2、SQL 2008 R2)。我设置了一个指向 2008 年数据库的链接服务器。我更新了存储过程以指向 2008 服务器,然后收到有关 MSDTC 和 RPC 的错误 (http://www.safnet.com/writing/tech/archives/2007/06/server_myserver.html)。我在链接服务器上启用了“rpc/rpc out”,并将 MSDTC 设置为允许网络访问(如下所示:http://www.sqlwebpedia.com/content/msdtc-troubleshooting http://www.sqlwebpedia.com/content/msdtc-troubleshooting).
现在,当我尝试运行导出函数时,我得到了上述信息:“此 SqlTransaction 已完成;它不再可用。”对我来说奇怪的是,当我刚刚运行存储过程(来自 SSMS)时,它说它成功完成。
有没有人见过这个?我是否遗漏了配置中的某些内容?我不断浏览相同的页面,我发现的唯一一件事是我在进行 MSDTC 更改后没有重新启动(此处提到:http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/7172223f-acbe-4472-8cdf-feec80fd2e64/ http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/7172223f-acbe-4472-8cdf-feec80fd2e64/).
我可以发布部分或全部存储过程,如果有帮助的话......请告诉我。
我相信此错误消息是由于“僵尸事务”造成的。
查找事务被提交两次(或回滚两次,或回滚并提交等)的可能区域。 .Net 代码是否在 SP 提交事务后提交事务? .Net 代码是否会在遇到错误时将其回滚,然后尝试在 catch(或finally)子句中再次将其回滚?
旧服务器上可能从未遇到错误条件,因此从未遇到错误的“双回滚”代码。也许现在你有这样的情况is新服务器上出现一些配置错误,现在错误的代码通过异常处理得到解决。
你能调试到错误代码吗?你有堆栈跟踪吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)