Im使用 Transaction Binding=Explicit Unbind 在连串的建议 在这里, 由于Im也使用TransactionScope与超时。问题是,这一连接,似乎并没有关闭之后,正在设置和最终没有更多的连接提供连接水池。我得到了同样的结果,当我修改了TransactionTimeoutIssueDemo(见的链接),并跑TransactionScopeTest()(明确的解除连接string)足够的时间在一个循环使用了所有可用连接的连接池。默认值连接在游泳池是100,但这是可以改变通过使用设置 Max Pool Size =10 为实例。它似乎是连接不会被释放时使用明确的解除,即使这两个和和TransactionScope用的 using 条款。任何人知道如何处理这个吗?

有帮助吗?

解决方案

在连接似乎只停留在游泳池的情况下,你会得到一个例外,就像例如不被重用。如果您增加超时连接将被重用。

一个解决此问题的是清除的情况下,你得到的连接池这样的异常:

using (SqlConnection con = new SqlConnection(connectionString))
{
    con.Open();
    try
    {
        Console.WriteLine("Server is {0}", con.ServerVersion);
        Console.WriteLine("Clr is {0}", Environment.Version);
        for (int i = 0; i < 5; i++)
        {
            using (SqlCommand cmd = con.CreateCommand())
            {
                cmd.CommandText = "insert into TXTEST values ( " + i + " )";
                cmd.ExecuteNonQuery();
            }
            Console.WriteLine("Row inserted");
        }
        Thread.Sleep(TimeSpan.FromSeconds(1));
    }
    catch
    {
        SqlConnection.ClearPool(con);
        throw;
    }
}

在大多数情况下,该交易将在超时时间内完成,一切都会好得很。当交易的真正做到超时您清除池以清理,将不会得到重用脏连接。这当然会影响在不影响此问题池中的其他连接。

这是一个解决办法难看,但它似乎工作。

其他提示

有关它的价值,这个问题被固定在.NET 4.0中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top