2008-11-24 10 views
5

मैं Transaction Binding=Explicit Unbind कनेक्शन स्ट्रिंग में here के रूप में उपयोग कर रहा हूं क्योंकि मैं टाइमआउट के साथ ट्रांज़ेक्शनस्कोप का भी उपयोग कर रहा हूं। समस्या यह है कि निपटान के बाद कनेक्शन बंद नहीं लगते हैं और अंत में कनेक्शन पूल में और कनेक्शन उपलब्ध नहीं हैं। जब मैंने कनेक्शन पूल में सभी उपलब्ध कनेक्शनों का उपयोग करने के लिए लूप में पर्याप्त बार ट्रांज़ेक्शनटाइमआउटआईस्यूडेमो (लिंक देखें) को संशोधित किया और लेनदेनस्कोपटेस्ट() (स्पष्ट अनबिंड कनेक्शन स्ट्रिंग के साथ) चलाया। पूल में कनेक्शन के लिए डिफ़ॉल्ट मान 100 है लेकिन उदाहरण के लिए सेटिंग Max Pool Size =10 का उपयोग करके इसे बदला जा सकता है। ऐसा लगता है कि एसक्यूएलकनेक्शन और ट्रांज़ेक्शनस्कोप दोनों को using क्लॉज के साथ उपयोग किए जाने पर स्पष्ट अनबिंड का उपयोग करते समय कनेक्शन जारी नहीं किए जाएंगे। किसी को भी यह कैसे संभालना है?लेनदेन बाध्यकारी = स्पष्ट अनबिंड का उपयोग करते समय कनेक्शन बंद नहीं होंगे; कनेक्शन स्ट्रिंग

उत्तर

3

कनेक्शन केवल पूल में रहना प्रतीत होता है और उदाहरण के समान, अपवाद मिलने पर पुन: उपयोग नहीं किया जाता है। यदि आप टाइमआउट बढ़ाते हैं तो कनेक्शन का पुन: उपयोग किया जाएगा।

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

ज्यादातर मामलों में लेन-देन टाइमआउट के भीतर पूरे हो और सब कुछ ठीक है और बांका होगा:

इस समस्या का एक समाधान का आप इस तरह एक अपवाद मिल मामले में कनेक्शन पूल खाली करने के लिए है। जब लेनदेन वास्तव में टाइमआउट करता है तो आप गंदे कनेक्शन को साफ करने के लिए पूल को साफ़ करते हैं जिसे पुन: उपयोग नहीं किया जाएगा। यह निश्चित रूप से पूल में अन्य कनेक्शन को प्रभावित करेगा जो इस समस्या से प्रभावित नहीं हैं।

यह एक बदसूरत कामकाज है लेकिन ऐसा लगता है कि यह काम करता है।

0

इसके लायक होने के लिए, यह समस्या .NET 4.0 में तय की गई थी।

संबंधित मुद्दे