9

मैं Azure सक्रिय निर्देशिका में प्रमाणपत्र-आधारित प्रमाणीकरण का उपयोग करने के लिए कुछ .NET अनुप्रयोगों को स्थापित करने का प्रयास कर रहा हूं और फिर मेरी पहुंच को अधिकृत करने के लिए सक्रिय निर्देशिका का उपयोग कर रहा हूं एसक्यूएल अज़ूर डीबी।रिफ्रेशिंग एसक्यूएल कनेक्शन एज़ूर एडी एक्सेस टोकन लंबे समय तक रहने वाली इकाई फ्रेमवर्क संदर्भ

जिस समस्या में मैं दौड़ रहा हूं वह यह है कि एप्लिकेशन के कुछ हिस्सों में एक डीबीकॉन्टेक्स्ट का उपयोग होता है जो थोड़ा लंबा रहता है। यदि आप इसे समाप्त होने के 5 मिनट के भीतर अनुरोध करते हैं तो ADAL लाइब्रेरी एक्सेस टोकन रीफ्रेश करने का प्रयास करती है। समस्या यह है कि मेरे कुछ डीबीकॉन्टेक्स 5 मिनट से अधिक समय तक जीवित रह सकते हैं। इसलिए, डीबीकॉन्टेक्स्ट के जीवन के माध्यम से आधे रास्ते तक पहुंच टोकन अब अच्छा नहीं है और जब मैं SaveChanges को आजमाता हूं तो मुझे डेटाबेस कनेक्शन अपवाद मिलता है।

मेरे डीबीकॉन्टेक्स 5 मिनट से कम समय तक रहने के लिए रिफैक्टरिंग के अलावा, क्या मैं इसे ठीक करने के लिए कुछ भी कर सकता हूं?

एक चीज जिसने मैंने कोशिश की थी वह एंटीटी फ्रेमवर्क में कुछ हुक ढूंढना था जहां मैं समाप्त हो चुके टोकन अपवाद को पकड़ सकता था और उसके बाद मौजूदा कनेक्शन को नए बनाए गए एक के साथ बदल सकता था जिसमें एक नया एक्सेस टोकन होता है। मैंने एक कस्टम कनेक्शन फैक्ट्री ईएफ पास करने की कोशिश की और फिर जब मैं एक समाप्त टोकन अपवाद प्राप्त करता हूं तो पुनः प्रयास करने के लिए निष्पादन रणनीति का उपयोग कर रहा हूं। यह मेरे लिए काम नहीं कर रहा है हालांकि मैं कस्टम निष्पादन रणनीति से वर्तमान कनेक्शन को संशोधित या पुनर्निर्मित नहीं कर सकता।

किसी भी विचार की सराहना की जाएगी।

धन्यवाद!

+0

यह एक बुरा विचार की तरह लगता है। एक संदर्भ का उद्देश्य काम की इकाई के लिए जीना है, 5 मिनट लगता है जैसे आप एक ही संदर्भ के साथ काम की कई इकाइयां कर रहे हैं। यदि आप किसी संदर्भ के साथ बहुत सी चीजें करते हैं तो इससे आपको अन्य मेमोरी पदचिह्न और खराब प्रदर्शन जैसे अन्य मुद्दों का कारण बन जाएगा। मेरी सिफारिश आपके कोड को दोबारा करने के लिए होगी (इस विशिष्ट मुद्दे के बावजूद) –

+0

क्या आप सटीक रूप से ईएफ के किस संस्करण का उपयोग कर रहे हैं, क्या आप पहचान फ्रेमवर्क का उपयोग कर रहे हैं? – GaelSa

+0

आप डीबीकॉन्टेक्स्ट तक पहुंच टोकन कैसे पास कर रहे हैं? यहां तक ​​कि यदि डीबीकॉन्टेक्स्ट लंबे समय तक जीवित रहता है, तो अंतर्निहित डीबीकनेक्शन लंबे समय तक नहीं रह रहा है, यह प्रत्येक एसक्यूएल क्वेरी के लिए खोला और बंद है। –

उत्तर

2

यदि आप इसे बर्दाश्त कर सकते हैं तो अपने कोड को पुनः सक्रिय करना सबसे अच्छा विकल्प है।

यदि आप नहीं कर सकते हैं, तो आप प्रत्येक 4 मिनट में आग लगाने के लिए टाइमर सेट कर सकते हैं, और इस टाइमर में डीबीसीएन्टेक्स्ट के साथ कुछ सरल क्वेरी करें (यदि आवश्यक हो तो यह आपके प्रमाणीकरण टोकन को रीफ्रेश करेगा, यह सुनिश्चित करना कि यह अभी भी वैध है जब आप SaveChanges)। सरल क्वेरी और SaveChanges को एक ही समय में DBContext का उपयोग करके बचने के लिए आपको कुछ लॉक के साथ डीबीसीएन्टेक्स्ट को सुरक्षित रखने की आवश्यकता होगी।

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