2009-12-09 90 views
1

我一直在遇到一个错误,我认为这是由于数据库正在处理和读取到数据库中的大量数据导致数据库超时。数据库事务超时问题

我不断收到此错误信息:

分布式事务已完成。 要么将​​此会话列入新的 事务或NULL事务。

我计时超时需要多长时间,并且时间一直在60秒左右。因此,我认为它可能与组件服务(Windows XP)中设置的事务超时限制(默认60秒)有关。我把它增加到了300秒。

如果没有工作,我加入编辑的machine.config文件:

<system.transactions> 
    <machineSettings maxTimeout="02:00:00" /> 
</system.transactions> 

这也不能工作。

我不认为这与我的数据有任何关系。它是从Excel电子表格中读取的。当我将电子表格分成两个单独的文件时,它运行良好。

希望我只是想失去一些简单的事情,像另一个最大超时设置的地方。

希望有人遇到过这个!

编辑:我正在使用SQL Server和Linq2SQL。

+0

Andrew,您可能想告诉我们您正在使用哪个数据库(SQL Server?)。 – 2009-12-09 00:26:55

+0

您是否看到错误消息的搜索结果? http://www.bing.com/search?q=Distributed+transaction+completed.+Either+enlist+this+session+in+a+new+transaction+or+the+NULL+transaction.&src=IE-SearchBox&FORM = IE8SRC – 2009-12-09 00:27:25

+0

@Mike - 是的,我已经做了谷歌搜索。 – Andrew 2009-12-09 00:46:31

回答

1

我不知道为什么,但我通过去解决这个问题导入web.config并加入:

<system.transactions> 
    <defaultSettings timeout="02:00:00"/> 
</system.transactions> 

我认为这个设置将从machine.config继承。也许他们是两种不同的超时设置?我不知道。

如果有人有额外的说明,请评论!

编辑1:另外,如果有人使用ASP.NET Ajax控件,请务必增加脚本管理器的AsyncPostBackTimeout属性以适应更长的时间段。

编辑2:我删除了添加到machine.config中的行,并将分布式事务超时设置重置为默认设置。这看起来没有任何影响,只要修改了web.config文件和脚本管理器,我的程序就可以正常运行。

+0

还有一个web.config默认文件。该站点的web.config文件继承自该文件,该文件从machine.config继承。换句话说,web.config和machine.config之间的继承链中有另一个文件,它设置默认值。 – 2009-12-10 23:52:25

+0

我明白了。如果这个web.config默认文件保存在哪里? – Andrew 2009-12-10 23:59:15

4

安德鲁,我不认为这是由超时造成的。否则,你会收到一个特定的超时错误。这很可能是一个编程错误。我自己也遇到过这种情况,而且几乎一直是我制作不当的代码导致问题。

我认为你有另一个问题。长时间运行交易并不是一个好主意。如果你的公司有DBA的话,他们可能会出于好的理由而抛弃这个。您在很长一段时间内锁定了大量资源。有些事情会因此而受到影响。

顺便说一句,如果您担心超时,请检查连接字符串上的超时设置。

兰迪

0

要更改超时,你可以在你的数据上下文设置CommandTimeout属性:

var db = new YourDataContext(); 
db.CommandTimeout = 300; 

说了这么多,你有一个分布式事务的任何时间,这是值得细细品味在原因,并尽量避免他们 - 你的问题可能与此有关,而不是一个超时......