2009-11-20 8 views
6

मैं अपने आवेदन में निम्न त्रुटि हो रही है:मुझे कैसे पता चलेगा कि एएसपी.नेट में कौन सी ऑब्जेक्ट को क्रमबद्ध नहीं किया जा सकता है?

सत्र स्थिति को क्रमानुसार करने में असमर्थ। 'StateServer' और 'SQLServer' मोड में, ASP.NET सत्र राज्य वस्तुओं को क्रमानुसार जाएगा, और एक परिणाम के रूप गैर serializable वस्तुओं या MarshalByRef वस्तुओं की अनुमति नहीं कर रहे हैं। वही प्रतिबंध लागू होता है यदि समान धारावाहिकता कस्टम सत्र स्थिति स्टोर द्वारा 'कस्टम' मोड में किया जाता है।

स्टैक ट्रेस कोई अच्छी जानकारी प्रदान नहीं कर रहा है जिस पर ऑब्जेक्ट क्रमबद्ध करने में सक्षम नहीं है। क्या बच्चे को समस्या का पता लगाने का कोई अच्छा तरीका है?

संपादित करें: मुझे समस्या मिली है, मैं एक लिंक कथन (निष्पादित नहीं) को क्रमबद्ध करने की कोशिश कर रहा था। लेकिन मैं एक ऐसा उत्तर चुनने का प्रयास करूंगा जो इस मुद्दे को हल कर लेगा। [Serializable] या ISerializable रूप में किसी भी आप निशान:

+0

यह वास्तव में कठिन है कि रिकर्सिवली एक वस्तु के सभी संदर्भों को पाता है एक समारोह के साथ आते हैं और निर्धारित करेंगे कि कुछ भी [Serializable] के रूप में चिह्नित नहीं किया गया है करने के लिए नहीं होना चाहिए। –

+0

आप कैसे जानेंगे कि कौन से लोगों को क्रमबद्ध किया जाएगा और सत्र में जोड़ा जाएगा? –

उत्तर

5

वास्तव में, आप मुख्य रूप से अपने खुद राज्य डाटा/वस्तुओं (आदर्श डीटीओ वर्ग के रूप में दिखाया गया था), जो मामले में जवाब है भंडारण किया जाना चाहिए। आपको सत्र-राज्य में कच्चे यूआई नियंत्रण या अन्य अज्ञात ऑब्जेक्ट्स नहीं जोड़ना चाहिए। विशेष रूप से, like this के कारणों के लिए, जिस दिन दूसरे दिन ऐप पर एक बड़ा प्रदर्शन प्रभाव पड़ा।

+0

+1 अच्छा बिंदु और जानकारीपूर्ण लिंक। – IrishChieftain

+0

@Marc Gravell: मैंने सोचा कि मैं एक IEnumerable > भंडारण किया गया था, समस्या मैं केवल Linq खंड भंडारण किया गया था, लेकिन अन्य स्थानों में मैं पहली बार ToList() विस्तार की गणना करने में उपयोग कर रहा था था। –

0

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

2

MbUnit (अब गल्लियो) एक Assert.IsSerializable() परीक्षण है कि काम में यहाँ आ सकता है।

+0

मैं एक इकाई परीक्षण जो वर्ग मैंने सोचा था कि अपराधी था पर एक द्विआधारी क्रमांकन किया बनाने के लिए किया था। अतीत से –

0

आप अपराधी प्रकारों को पा सकते हैं जो .NET फ्रेमवर्क कोड डीबगिंग के माध्यम से क्रमबद्ध अपवाद को आग लगाते हैं। कम से कम यही मैंने किया था।

1

आप वस्तु को क्रमानुसार करने की कोशिश, और System.Runtime.Serialization.SerializationException कि जब यह serializable नहीं है फेंक दिया है निरीक्षण कर सकते हैं। यह आपको बताएगा कि ऑब्जेक्ट के कौन से सदस्य या अभिभावक को क्रमबद्ध नहीं किया जा सकता है।

उदाहरण कोड:

var f = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 
f.Serialize(new System.IO.MemoryStream(), yourObject); 
+1

विस्फोट। लेकिन हां, मुझे लगता है कि मैं अब उस से जब मैं प्रश्न पोस्ट अपवाद में अधिक जानकारी के देखा है। –

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