2011-01-14 10 views
9

यदि आप हमारे सर्वर पर होस्ट की गई वेबसाइटों में से किसी एक पर एक वेब पेज खोलते हैं, तो इसे 20 मिनट तक छोड़ दें और फिर एक फॉर्म सबमिट करें, Validation of viewstate MAC failed. त्रुटि होती है।व्यूस्टेट मैक का सत्यापन 20+ मिनट के लिए पृष्ठ पर विफल रहा

इसके लिए क्या संभावित कारण हो सकते हैं?

उत्तर

10

हमें इसका उत्तर खोजने में थोड़ी देर लग गई है क्योंकि मुझे सूचित किया गया था कि एक और आईआईएस 7 सर्वर मैं उसी व्यक्ति द्वारा उसी तरह से स्थापित करने की तुलना कर रहा था।

यह उन वेबसाइटों के साथ सर्वर को दिखाता है जो यह त्रुटि प्राप्त कर रहे थे Plesk का उपयोग करके सेटअप किया गया था, जबकि अन्य सर्वर नहीं था।

ऐसा लगता है कि प्लेस्क एप्लिकेशन पूल पर 5 मिनट तक निष्क्रिय-टाइमआउट सेट करता है, जो इस त्रुटि का कारण बन रहा था।

इस निम्न कार्य बदलने के लिए:

  1. ओपन आईआईएस
  2. अनुप्रयोग पूल नोड पर क्लिक करें
  3. अपने वेब अनुप्रयोग के अनुप्रयोग पूल
  4. राइट क्लिक करें और advanace सेटिंग्स का चयन
  5. सेट का पता निष्क्रिय समय-समय (मिनट) संपत्ति 0 तक या 30+ मिनट
+1

खुशी है कि आप काम कर रहे हैं, मैंने कभी निष्क्रिय समय के बारे में सोचा नहीं और माना कि यह एक समझदार मूल्य होगा। वैसे भी मुझे प्रयास के लिए अपवित्रता मिलती है? :) – Kev

+0

हाहा यकीन है, आपकी मदद के लिए धन्यवाद! – Curt

+0

हमम क्या आप अपना उत्तर संपादित करने का प्रयास कर सकते हैं? यह इसके संपादित होने तक बंद कर देता है, फिर मैं वोट कर सकता हूं: एस – Curt

11

ऐसे कुछ कारण है ऐसा कर सकते हैं:

स्वत: -उत्पादित मशीन कुंजी:

अपने अनुप्रयोग पूल में 20 मिनट के डिफ़ॉल्ट निष्क्रिय समयबाह्य है और आप स्वत: जनरेट सत्यापन उपयोग कर रहे हैं और डिक्रिप्शन कुंजी तब प्रत्येक बार जब पूल शुरू होता है तो यह चाबियों का एक नया सेट उत्पन्न करेगा। यह ब्राउज़र के एन्क्रिप्टेड व्यूस्टेट को अमान्य करता है। आप यह भी पाएंगे कि निरंतर टिकटों के लिए फॉर्म प्रमाणीकरण टिकट भी अमान्य हो जाएंगे।

में तय मूल्यों के लिए इन कुंजियों इस सेट पर काबू पाने के लिए:

`c:\%systemroot%\microsoft.net\framework\v2.0.50727\CONFIG\machine.config` 

आप <system.web> अनुभाग के लिए <machineKey> विन्यास तत्व जोड़ने के लिए की जरूरत है। "Web Farm Deployment Considerations" पर अनुभाग में नीचे

How To: Configure MachineKey in ASP.NET 2.0

स्क्रॉल करें और क्रिप्टोग्राफी द्वारा रैंडम कुंजी उत्पन्न: एक बहुत अच्छा यहाँ लेख में बताया गया है कि ऐसा करने के तरीके नहीं है।

यदि आप लोड संतुलित वेब फार्म चला रहे हैं तो आपको प्रत्येक सर्वर की मशीन कुंजी को बिल्कुल उसी मान पर सेट करने की आवश्यकता है।

गलत रूप action मूल्य (3.5SP1):

वहाँ भी एक मामले (पोस्ट 3.5SP1) यदि आप पृष्ठ के अलावा कुछ करने के लिए अपने ASP.NET फार्म के action विशेषता निर्धारित जहां वापस तैनात की जा रही है और आप क्रॉसपेज पोस्टबैक का उपयोग नहीं कर रहे हैं तो आपको यह त्रुटि मिल जाएगी। लेकिन आप इस तुरंत देखना चाहते हैं:

Validation of viewstate MAC failed after installing .NET 3.5 SP1

समय/लांग रनिंग पन्ने:

वहाँ भी है कि पृष्ठों में लंबा समय लग जहां अगर रेंडर करने के लिए के लिए एक बढ़त मामले पृष्ठ आंशिक रूप से प्रस्तुत किया गया है और एक पोस्टबैक होता है:

Validation of viewstate MAC failed error

रूट कारण यह अपवाद प्रकट होता है क्योंकि DataKeyNames का उपयोग करके नियंत्रण एन्क्रिप्टेड होने के लिए व्यूस्टेट की आवश्यकता होती है। Viewstate एन्क्रिप्टेड है जब (डिफ़ॉल्ट मोड, ऑटो, अगर नियंत्रण कि आवश्यकता एन्क्रिप्ट करने के लिए, नहीं तो नहीं है), पृष्ठ सिर्फ टैग के बंद करने से पहले क्षेत्र कहते हैं।लेकिन इस छिपे हुए क्षेत्र को लंबे समय से चलने वाले पृष्ठों के साथ ब्राउज़र, और पर प्रस्तुत नहीं किया गया हो सकता है, यदि आप इससे पहले कोई पोस्टबैक करते हैं, ब्राउज़र इस क्षेत्र (फॉर्म पोस्ट संग्रह में) के बिना पोस्टबैक शुरू करता है। अंतिम परिणाम यह है कि यदि यह फ़ील्ड पोस्टबैक पर छोड़ा गया है, तो पृष्ठ नहीं जानता है कि व्यूस्टेट एन्क्रिप्ट किया गया है और उपर्युक्त अपवाद का कारण बनता है। आईई। पृष्ठ पोस्टबैक करने से पहले पूरी तरह से लोड होने की उम्मीद है।

+0

हाय केव, आपकी प्रतिक्रिया प्रतिक्रिया के लिए धन्यवाद। हालांकि, हम मैन्युअल रूप से मैन्युअल रूप से मशीन कुंजी निर्दिष्ट कर चुके हैं। मुझे विश्वास नहीं है कि 'एक्शन' मान हमारे लिए एक मुद्दा है, क्योंकि हम इसकी व्याख्या नहीं करते हैं, और हमें यह समस्या एएसपी.नेट 2.0 में भी है। साथ ही, क्योंकि हम 20+ मिनट के लिए फॉर्म पर कार्रवाई नहीं कर रहे हैं, मुझे विश्वास नहीं है कि लोड करने के लिए पर्याप्त समय नहीं है पृष्ठ प्रासंगिक है। चीयर्स। – Curt

+0

क्या आप किसी अन्य संभावित कारण के बारे में सोच सकते हैं कि यह क्यों हो सकता है? आपकी बहुत सराहना करने में मदद मिलती है क्योंकि हम इसे हल करने के लिए संघर्ष कर रहे हैं! – Curt

+0

@ कर्ट - हम्म यह एक सिर स्क्रैचर है। क्या आप घटना के दौरान घटनाओं में कुछ भी दिलचस्प दिख रहे हैं? – Kev

0

व्यूस्टेट मैक का सत्यापन विफल रहा। यदि यह एप्लिकेशन किसी वेब फार्म या क्लस्टर द्वारा होस्ट किया गया है, तो सुनिश्चित करें कि कॉन्फ़िगरेशन वही सत्यापन निर्दिष्ट करता है और सत्यापन एल्गोरिदम। ऑटोगनेरेट का उपयोग क्लस्टर में नहीं किया जा सकता जैसा कि मैंने पाया, मेरे मास्टर पेज के हेडर भाग में <base .... टैग था, जिसे मैंने अंतिम टाई में और प्रकाशन से पहले जोड़ा था। यह टैग एक पृष्ठ पर सभी लिंक के लिए एक डिफ़ॉल्ट यूआरएल और एक डिफ़ॉल्ट लक्ष्य निर्दिष्ट करता है। इस बार गलती का यह मुख्य कारण था।

2

मैं इस समस्या में भाग गया, और परिदृश्य एक बहुत ही बुनियादी सर्वर था जो एक बहुत ही बुनियादी एएसपी.Net अनुप्रयोग होस्ट कर रहा था। बहुत संघर्ष करने के बाद मुझे यह पोस्ट मिला, और इससे मुझे यह समझने में मदद मिली कि समस्या कार्यकर्ता प्रक्रिया को पुनर्नवीनीकरण कर रही थी।

मुझे यह काफी कठोर लगता है, क्योंकि यह एक परिदृश्य है जिसे एक एप्लिकेशन का सामना करना पड़ सकता है और ऐसी मूल त्रुटि आपको इसे ठीक से संभालने से रोकती है। जहां तक ​​मैं देख सकता था, यह उत्पत्ति हुई है क्योंकि इस कुंजी को संभालने के लिए डिफ़ॉल्ट कॉन्फ़िगरेशन machine.config का उपयोग करेगा जो बताता है कि कुंजी स्वचालित रूप से जेनरेट की जाती हैं और प्रति एप्लिकेशन अलग होती हैं। मुझे लगता है कि इस मामले में एएसपी.Net एक अस्थायी कुंजी है और इसे कार्यकर्ता प्रक्रिया स्तर पर संग्रहीत करता है, और जब उस कार्यकर्ता की प्रक्रिया समाप्त हो जाती है तो समस्या उत्पन्न होती है और इसे नियंत्रित नहीं किया जा सकता है।

मशीन कुंजी को कॉन्फ़िगर करने का विकल्प समस्या हल करता है, इसे web.config फ़ाइल पर सेट करने के लिए स्पष्ट रूप से बेहतर है, इसे पूरे machine.config को निम्नतम ग्रैन्युलरिटी स्तर पर रखने के लिए स्पष्ट है।

एक और विकल्प दृश्य स्थिति मैक चेक को अक्षम करना है, web.config के माध्यम से भी। यह आपके आवेदन के सुरक्षा स्तर और दृश्य स्थिति को छेड़छाड़ करने का जोखिम पर निर्भर करेगा।

और सबसे अच्छा विकल्प एक एमवीसी अनुप्रयोग के साथ दृश्य स्थिति का उपयोग करने से बचने के लिए है।

+2

मुझे विश्वास है कि आप '* इस पोस्ट *' के लिंक को भूल गए हैं ... – LSerni

+0

मैं उत्साहजनक रूप से दूसरा डिएगो का सबसे अच्छा विकल्प सुझाव हूं। :-) मुझे एएसपी.Net वेबफॉर्म पेज में लंबे ऑटो-जेनरेट किए गए HTML तत्व आईडी से नफरत है। मैंने पाया कि JQuery डेटाटेबल्स में समस्याएं हैं जब HTML तत्व आईडी 50 या उससे अधिक वर्णों से अधिक हो जाती है। वेबफॉर्म के साथ, मेरे लिए HTML तत्व आईडी के 70+ वर्णों के साथ असामान्य नहीं है, खासकर यदि मैं नेस्टेड रिपियटर्स का उपयोग कर समाप्त करता हूं, और एसीएक्स नियंत्रण पृष्ठों का उपयोग करता हूं। – Bryan

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