हमारे पास ASP.NET वेबसाइट के साथ एक समस्या है जहाँ उपयोगकर्ताओं के सत्र अजीब तरह से व्यवहार कर रहे हैं - सत्र डेटा दिखाई दे रहा है, गायब हो रहा है और फिर से दिखाई दे रहा है।
मुझे लगता है कि मुझे पता है कि समस्या क्या है:
- हमारा सेटअप 2 x लोड संतुलित है WebServers + एकल सत्र राज्य डेटाबेस।
- ASP.NET SQL सत्र स्थिति संग्रहण, IIS वेबसाइट इंस्टेंस आईडी (मेटाबेस आईडी) पर निर्भर करता है ताकि आने वाले सत्र कुकी आईडी की विशिष्ट पहचान की जा सके और मानों को पुनः प्राप्त किया जा सके।
- वेबसाइट का IIS वेबसाइट इंस्टेंस आईडी प्रत्येक लाइव सर्वर (ID / W3SVC / 1 / Root on WebServer A, ID / W3SVC / 2 / Root on Webserver B) पर अलग-अलग है।
- लोड बैलेंसिंग क्लाइंट आत्मीयता का उपयोग नहीं कर रहा है, ताकि प्रत्येक उपयोगकर्ता HTTP अनुरोध या तो सर्वर पर जा सके।
इसलिए, जैसा कि उपयोगकर्ता साइट पर लॉग इन करता है और इधर-उधर जाता है, प्रत्येक HTTP कॉल या तो वेब सर्वर पर जा सकती है, और इसलिए सर्वर के आधार पर अलग-अलग आईडी के साथ एक सत्र राज्य रिकॉर्ड का उपयोग करें। वास्तव में उपयोगकर्ता के पास एक साथ 2 अलग सत्र उदाहरण होंगे। मेरा मानना है कि मैंने इसे डेटाबेस ASPStateTempSession तालिका में सत्यापित किया है , प्रत्येक सत्र कुकी आईडी लगभग 2 - पहचाने जाने वाले रिकॉर्ड के अनुरूप लगती है (उनकी आईडी केवल पिछले कुछ वर्णों से भिन्न होती है, जो मेरा मानना है कि AppID से AppID पर आधारित एक संशोधक है AspStateTempApplications तालिका) एक दूसरे के सेकंड के भीतर बनाई गई।
इसलिए सत्र राज्य दुर्व्यवहार करता दिखाई देगा क्योंकि एक सत्र रिकॉर्ड में किए गए परिवर्तन केवल उस वेब सर्वर के खिलाफ बने रहेंगे। यदि उपयोगकर्ता अन्य लोड-संतुलित सर्वर पर जाता है, तो सत्र मान गायब या वापस आ जाएगा।
मेरा मानना है कि समाधान साइटों की आईआईएस इंस्टेंस आईडी (जैसे उन्हें दोनों / W3SVC / 1 / रूट बनाते हैं) को सिंक्रनाइज़ करने के लिए है , लेकिन मैंने उन्नत सेटिंग्स के तहत IIS में उस मूल्य को संपादित करने की कोशिश की, और हालांकि यह ठीक बचा, यह सिर्फ बना। साइट उस सर्वर पर 404s लौटाती है जब तक कि मैंने इसे वापस नहीं बदल दिया।
मुझे इस समस्या के लिए एक VBS स्क्रिप्ट मिली लेकिन यह IIS 6 के लिए ही लगती है इसलिए मैं इसे आज़माने के लिए चिंतित हूं। क्या किसी और ने IIS 7.5 पर इस स्थिति का सामना किया है, और आपने इसे कैसे ठीक किया?
संपादित करें / समाधान
मेरी गलती यह थी कि मैं IIS में साइट इंस्टेंस आईडी बदलने के बाद IIS को फिर से शुरू करना भूल गया। इसके बाद, आईडी को अपडेट किया गया और ASP.NET सत्रों को दो वेब सर्वर पर सिंक किया गया।
पूर्ण निर्देश:
- सर्वर LIVE1 पर दूरस्थ डेस्कटॉप, IIS Mgr खोलें, समस्या साइट पर क्लिक करें और साइडबार में उन्नत सेटिंग्स चुनें ।
- आईडी को कुछ अद्वितीय जैसे 10 में बदलें। ठीक पर क्लिक करें।
- वेब सेवा को पुनरारंभ करें (
c:\windows\system32\iisreset /restart
)
LIVE2 के लिए भी ऐसा ही करें (सुनिश्चित करें कि साइट आईडी LIVE1 पर समान हो)
ध्यान दें कि साइट आईडी साइट फ़ाइलों के स्थान को प्रभावित करती है उदाहरण के लिए लॉग फ़ाइल फ़ोल्डर बन जाएगा C:\inetpub\logs\LogFiles\W3SVC10
।
ध्यान दें कि आप प्रत्येक सर्वर पर IIS कॉन्फ़िग फ़ाइल में साइट आईडी विशेषता को संपादित करके इन परिवर्तनों को मैन्युअल रूप से कर सकते हैं C:\Windows\System32\inetsrv\config\applicationHost.config
:। व्यवस्थापक निजी की आवश्यकता है और अभी भी बाद में एक रीसेट की आवश्यकता है।