2008-11-24 18 views
5

Bağlantı dizgisinde here numaralı bağlantı dizesinde kullanıyorum, çünkü TransactionScope'u zaman aşımı ile de kullanıyorum. Sorun, bağlantıların bertaraf edildikten sonra kapanmayacağı ve nihayetinde bağlantı havuzunda daha fazla bağlantı bulunmadığıdır. TransactionTimeoutIssueDemo değiştirdikten sonra aynı sonucu aldım (bağlantıya bakın) ve TransactionScopeTest() (açık açılmamış bağlantı dizesi ile) bağlantı havuzundaki tüm kullanılabilir bağlantıları kullanmak için bir döngü içinde yeterli zaman çalıştı. Havuzdaki bağlantılar için varsayılan değer 100'dür, ancak bu, örneğin Max Pool Size =10 ayarı kullanılarak değiştirilebilir. SqlConnection ve TransactionScope her ikisi de using yan tümcesiyle kullanılsa bile, bağlantılar açık açılmadan kullanıldığında bağlantıların yayınlanmayacağı anlaşılıyor. Bunu nasıl halledeceğini bilen var mı?Bağlantılar, İşlem Binding = Explicit Unbind; Bağlantı dizgisinde

cevap

3

Bağlantılar yalnızca örnekte olduğu gibi bir istisna almanız durumunda havuzda kalıyor ve yeniden kullanılmıyor gibi görünüyor. Zaman aşımını arttırırsanız bağlantı tekrar kullanılacaktır. işlem zaman aşımı süresi içinde tamamlayacak ve her şey ince ve züppe olacaktır

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; 
    } 
} 

Çoğu durumda:

bu sorunun geçici böyle bir istisna olsun durumda bağlantı havuzu temizlemektir. işlemi aslında zaman aşımına uğradığında, yeniden kullanılmayacak kirli bağlantıları temizlemek için havuzu temizlersiniz. Bu elbette havuzda bu problemden etkilenmeyen diğer bağlantıları etkileyecektir.

Bu çirkin bir çözümdür, ancak işe yarıyor gibi görünüyor.

0

Değeri için, bu sorun .Net 4.0'da giderilmiştir.