使用enlist = false的连接在手动加入分布式事务后不会关闭

|| 我有一个使用
ServiceDomain
的分布式事务上下文。在其中,我打开一个带有连接字符串的SQL连接,该连接字符串指定为“ 1”,这样它就不会自动加入事务中。然后,如果我使用
EnlistDistributedTransaction
手动将连接加入到分布式事务中,则该连接不会关闭,可以以
InvalidOperationException
结尾:   超时时间已到。从池中获取连接之前已经过超时时间。这可能是因为所有池化连接都在使用中,并且达到了最大池大小。 请尝试以下操作:
try
{
    var configuration = new ServiceConfig
        {
            Transaction = TransactionOption.Required,
            TransactionTimeout = 1000
        };
    ServiceDomain.Enter(configuration);

    for (var i = 0; i < 500; ++i)
    {
        Console.WriteLine(i);
        using (var conn = new SqlConnection(\"Data Source=localhost;Initial Catalog=dotest;Integrated Security=SSPI;Enlist=False;\"))
        {
            conn.Open();
            if (i % 2 == 0) conn.EnlistDistributedTransaction((ITransaction) ContextUtil.Transaction);
            using (var cmd = conn.CreateCommand())
            {
                cmd.CommandText = \"INSERT INTO [Test]([ID]) VALUES(@num)\";
                cmd.Parameters.AddWithValue(\"@num\", i);
                cmd.ExecuteNonQuery();
            }
        }
    }

    ContextUtil.SetAbort();
}
finally
{
    ServiceDomain.Leave();
}
由于200个连接显然都没有关闭(默认连接池大小为100),因此在200个连接处卡住(并在超时后消失)。 (请注意,如果要在不创建表的情况下对其进行测试,则可以将其完全删除。) 我想念什么或做错什么?     
已邀请:
尝试在查询执行结束时设置
conn.EnlistDistributedTransaction(null);
using (var conn = new SqlConnection(\"Data Source=localhost;Initial Catalog=dotest;Integrated Security=SSPI;Enlist=False;\"))
{
    conn.Open();
    if (i % 2 == 0) conn.EnlistDistributedTransaction((ITransaction) ContextUtil.Transaction);
    using (var cmd = conn.CreateCommand())
    {
        cmd.CommandText = \"INSERT INTO [Test]([ID]) VALUES(@num)\";
        cmd.Parameters.AddWithValue(\"@num\", i);
        cmd.ExecuteNonQuery();
    }
   conn.EnlistDistributedTransaction(null);
}
    

要回复问题请先登录注册