【问题标题】:Transaction Timeout事务超时
【发布时间】:2014-02-12 13:52:32
【问题描述】:

我遇到了以下异常:

与当前连接相关的事务已经完成 但尚未处置。交易必须在 连接可用于执行 SQL 语句。

对数据库的“调用”需要 10m 53s(在没有事务的情况下测试并成功) 并且通过事务它在 10m 后抛出异常。所以我很确定这不是产生问题的代码,而是事务超时限制。

我看到很多人都在为这个问题而苦苦挣扎,但我已经尝试了我找到的所有可能的解决方案,但仍然没有成功摆脱这个异常。

我使用以下代码:

[...]
TransactionOptions transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = IsolationLevel.Snapshot;
transactionOptions.Timeout = new TimeSpan( 0, 0, 30, 0, 0 );

using( var scope = new TransactionScope(TransactionScopeOption.Required, transactionOptions) )
{
     foreach (var selector in GetDataContext().sp_GetChangedSelectors(changeSet))
     {
          // xml-result will be stored in a file
     }

     // multiple other SP calls the same way

     scope.Complete( );
}

我添加了语句

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

%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\Config 中的 ma​​chine.config 在两台机器上(本地和 sql-server-machine)。

我想不出接下来可以尝试什么了。有什么建议吗?

【问题讨论】:

    标签: c# sql sql-server transactions


    【解决方案1】:

    只是一个疯狂的猜测:您运行的是 32 位应用程序吗?那么这可能是错误的machine.config!

    %WINDIR%\Microsoft.NET\Framework\v4.0.30319

    否则我会检查这个值是否在 web.config 或 app.config 中被覆盖

    【讨论】:

    • @Viper 如果应用程序是 32 位,您应该在“进程”选项卡的任务管理器中看到(exe 的名称附加了 *32)跨度>
    • 不错。就是这样=)非常感谢你。不要考虑 32 位和 64 位的问题。
    【解决方案2】:

    确保您修改了正确的machine.config 文件。

    根据您编译应用程序的方式(AnyCPU/x64/x86,“首选 32 位”),使用的 machine.config 会有所不同(Framework 与 Framework64)。

    还要确保在修改 machine.config 后重新启动计算机。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      相关资源
      最近更新 更多