문제

나는 사용하고있다 Transaction Binding=Explicit Unbind 권장되는 연결 문자열에서 여기 타임 아웃과 함께 TransactionScope를 사용하고 있기 때문에. 문제는 폐기 후 연결이 닫히지 않는 것처럼 보이며 결국 연결 풀에 더 이상 연결을 사용할 수 없다는 것입니다. TransactionTimeoutIsSuedEmo (링크 참조)를 수정하고 연결 풀에서 사용 가능한 모든 연결을 사용하기에 충분한 시간을 루프에서 충분한 시간으로 RANACTIONOUTISSUEDEMO (링크 참조)를 수정했을 때 동일한 결과를 얻었습니다. 풀의 연결에 대한 기본값은 100이지만 설정을 사용하여 변경할 수 있습니다. Max Pool Size =10 예를 들어. SQLConnection과 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