2009-06-25 8 views
15

मेरे पास jQuery का $ .ajax() फ़ंक्शन का उपयोग कर क्लाइंट को भेज रहा डेटा का एक बड़ा हिस्सा मिला है। मैं एक एएसपी.NET वेब सेवा में एक विधि बुला रहा हूं जो JSON डेटा देता है। अधिकांश खोजों के लिए सबकुछ बढ़िया है, लेकिन जब मेरे पास लौटने के लिए एक बड़ा डेटा सेट है, तो मैं जावास्क्रिप्टसेरियलाइज़र मैक्सजेसन लम्बाई संपत्ति के साथ किसी समस्या में भाग लेता हूं। इसे संभालने के लिए सबसे अच्छा अभ्यास क्या है? मैं सिर्फ मनमाने ढंग से अधिकतम लंबाई निर्धारित नहीं करना चाहता हूं। क्या मैं वेब सेवा में MaxJsonLength सेट कर सकता हूं यदि डेटा लौटाया जा रहा है तो वर्तमान अधिकतम से बड़ा है या क्या मुझे क्लाइंट को डेटा के चक्स को फिर से लिखना और भेजना चाहिए?जावास्क्रिप्टसेरियलज़र। मैक्सजसन लम्बाई पार हो गया। इसे संभालने के लिए सबसे अच्छा अभ्यास क्या है?

Dictionary<string, object> jsonValuePairs = new Dictionary<string, object>(); 
//add some data to the dictionary... 
return System.Web.Script.Serialization.JavaScriptSerializer.Serialize(jsonValuePairs); 

उत्तर

32

है कि ग्राहक स्क्रिप्ट से ही कॉल कर रहे हैं वेब के तरीकों के लिए अधिकतम लंबाई निर्धारित करने के लिए एक ही रास्ता web.config फ़ाइल (नीचे) के माध्यम से है:

यहाँ वेब सेवा से प्रासंगिक टुकड़ा है। इसे सेट करने में आपकी समस्या क्या है? मैं डेटा के कुछ हिस्सों को स्ट्रीम करने के लिए हर बार कई एक्सएचआर कॉल पर ऐसा करता हूं।

<system.web.extensions> 
    <scripting> 
     <webServices> 
     <jsonSerialization maxJsonLength="500000"> 
     </jsonSerialization> 
     </webServices> 
    </scripting> 
</system.web.extensions> 

अद्यतन: डिफ़ॉल्ट आकार 20 9 7152 है जो यूनिकोड स्ट्रिंग डेटा के 4 एमबी के बराबर है। क्या आप वास्तव में उस डेटा को क्लाइंट को वापस भेजने जा रहे हैं? यदि ऐसा है तो आपको ऐप डिज़ाइन को देखने की आवश्यकता है क्योंकि उपयोगकर्ता का अनुभव धीमा और बोझिल होगा।

+1

मुझे web.config में अधिकतम लंबाई निर्धारित करने में कोई समस्या नहीं है। मैं सोच रहा था कि यह सबसे अच्छा अभ्यास है या नहीं। मैं उन मामलों से खुद को सुरक्षित रखना चाहता हूं जहां अधिकतम लंबाई से अधिक डेटा हो सकता है। –

+0

आह आपके प्रश्न में कहा गया है, "मैं केवल मनमाने ढंग से अधिकतम लंबाई निर्धारित नहीं करना चाहता" जो मैंने आपको वेब.config में माना था। – redsquare

+0

भ्रम के लिए खेद है। मुझे नहीं पता कि मेरा डेटा अधिकतम आकार हो सकता है। मुझे लगता है कि मैं जावास्क्रिप्टसेरियलाइज़र ऑब्जेक्ट का उपयोग नहीं करूँगा। –

5

this forum post के अनुसार इस संपत्ति का अधिकतम मूल्य 2147483647 है।

मैंने किसी भी समय डेटा को वापस अनुकूलित करने में कोई समय नहीं लगाया है, फिर भी (मैं इसे किसी भी व्यक्ति को देखने से पहले कर दूंगा) - लेकिन इस मूल्य सेट के साथ, आईई ने मुझे 'पृष्ठ पर एक लिपि लेना शुरू कर दिया है बहुत लंबा आप इसे मारना चाहते हैं 'संदेश।

एक समाधान डेटा को तोड़ना होगा - क्या कोई इसे करने के लिए एक अच्छा तरीका जानता है (jQuery आदर्श में)? मैं निश्चित रूप से सफलता हैंडलर में एक और AJAX कॉल कर सकता था।

10

2147483647 उपयोग करने के लिए सही मूल्य है। बस कोड आप की तरह

var JsonSerializer = new JavaScriptSerializer(); 
JsonSerializer.MaxJsonLength = Int32.MaxValue; 
3

अधिकतम स्वीकृत सीमा कुछ का उपयोग कर सकते में भ्रम से बचने के अधिकतम मूल्य जो होने वाला एक पूर्णांक पकड़ सकता है - 2147483647

0

web.config को यह स्निपेट शामिल:

<system.web.extensions> 
<scripting> 
    <webServices> 
    <jsonSerialization maxJsonLength="2147483647"/> 
    </webServices> 
</scripting> 

और अपने ग # कोड में:

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