2012-05-16 20 views
5

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

यदि मैं डब्ल्यूसीएफ सेवा को रोक दिए बिना SQL सेवा को पुनरारंभ करता हूं, तो डब्ल्यूसीएफ सेवा हमारे त्रुटि लॉग में त्रुटियों को लॉगिंग शुरू करती है, जो पूरी तरह से सामान्य है।

Cannot open database "mydatabase" requested by the login. The login failed." 

त्रुटि के स्टैक ट्रेस के साथ समाप्त होता है::

समस्या यह है कि कभी कभी (हमेशा), के बाद SQL सेवा को पुन: प्रारंभ हो गया है, WCF सेवा रिपोर्टों के इस त्रुटि हर अनुरोध पर जारी है

at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 
at System.Data.SqlClient.SqlConnection.Open() 

हालांकि यह हो रहा है, मैं SQL प्रबंधन स्टूडियो (उसी मशीन से डब्ल्यूसीएफ सेवा चलाकर) डेटाबेस से कनेक्ट करने में सक्षम हूं। समस्या को ठीक करने के लिए, मुझे अपनी डब्ल्यूसीएफ सेवा के लिए एप्लिकेशन पूल रीसायकल करना होगा।

तो मेरा सवाल यह है कि: इसका कारण क्या हो सकता है और यह सुनिश्चित करने के लिए मैं क्या कर सकता हूं कि मेरा ऐप एसक्यूएल पुनरारंभ से पुनर्प्राप्त हो सके?

पीएस .: मेरे देव बॉक्स (आईआईएस भी चला रहा है) पर, जब मैं एक ही परीक्षण करता हूं तो मुझे कुछ बार एक ही त्रुटि मिलती है (जबकि डेटाबेस लोड हो जाता है मुझे लगता है) और फिर यह फिर से काम करना शुरू कर देता है।

+0

आप एसक्यूएलएक्सप्शन को पकड़ने और विशिष्ट त्रुटि कोड की जांच करने की कोशिश कर सकते हैं, फिर SqlConnection.ClearPool (sqlConnection) पर कॉल करें; फिर एक और बार कथन पुनः प्रयास करें – Termit

उत्तर

1

कभी-कभी पूल से प्राप्त कनेक्शन एक नया (और आपका कनेक्शन प्रयास सफल होता है), अन्य बार एक कनेक्शन का पुन: उपयोग किया जाता है और कनेक्शन प्रयास विफल हो जाता है। सभी कटे कनेक्शन वास्तव में पुन: उपयोग नहीं किए जाते हैं, क्योंकि पूलर स्थिति का पता लगा सकता है या नहीं कर सकता है और पूल से ऐसे कनेक्शन को हटा सकता है।

From here:

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

यदि आप कनेक्शन को बहुत ही कम बनाते हैं, तो कोई प्रदर्शन प्रभाव नहीं है, पूलिंग बंद करना सबसे अच्छा है। कनेक्शन स्ट्रिंग में बस Pooling से no सेट करें।

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

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