2012-02-02 17 views
10

मैं jQuery $ .ajax json POST का उपयोग कर अपनी डब्ल्यूसीएफ वेब सेवा को कॉल कर रहा हूं।

इनपुट पैरामीटर में से एक बहुत लंबा है - 8000 बाइट्स से अधिक। उस में डेटा इस "78dace54-1eea-4b31-8a43-dcd01e172d14, ce485e64-e7c6-481c-a424-2624371180aa, ede4c606-f743-4e0a-a8cc-59bcffa7feda, f0a81ed1-80db- की तरह, GUIDs की एक अल्पविराम द्वारा पृथक सूची है 4f6d-92d7-2fc47759a409 "।

जब वह पैरामीटर 8176 बाइट लंबा, अनुरोध सफल होता है। जब यह (एक और कॉमा और GUID) - अनुरोध विफल रहता है।

यह ब्राउज़र और फिडलर (HTTP डीबगिंग प्रॉक्सी) से विफल रहता है। मैं वेब सेवा config को यह कहा:JSON पैरामीटर आकार सीमा

<configuration> 
<system.web.extensions> 
    <scripting> 
     <webServices> 
      <jsonSerialization maxJsonLength="50000000" recursionLimit="50000"/> 
     </webServices> 
    </scripting> 
</system.web.extensions> 

कि कोई फर्क नहीं पड़ता, अनुरोध अभी भी इनपुट परम बाइट्स 8176 से अधिक लंबे समय के लिए विफल रहता है।
वह इनपुट परम डब्ल्यूसीएफ पक्ष पर एक स्ट्रिंग में नक्शे।
मुझे क्या याद आ रही है? धन्यवाद! बाहर कर देता है, जो इस सेटिंग को नियंत्रित करता है कुल JSON संदेश लंबाई

<webServices> 
    <jsonSerialization maxJsonLength="50000000" recursionLimit="50000"/> 
</webServices> 

अन्य सेटिंग है कि व्यक्ति मापदंडों के लिए अधिकतम लंबाई को नियंत्रित करता है:

<bindings> 
    <webHttpBinding> 
    <binding name="Binding_Name" maxReceivedMessageSize="900000"> 
     <readerQuotas maxDepth="32" maxStringContentLength="900000" maxBytesPerRead="900000" maxArrayLength="120000" maxNameTableCharCount="120000"/> 
    </binding> 
    </webHttpBinding> 
</bindings> 

इसके अलावा

अद्यतन, यह मेरी समस्या हल , इसे सेट करना सुनिश्चित करें:

<system.web> 
    <httpRuntime maxRequestLength="900000"/> 

उम्मीद है कि यह वहां कुछ सिरदर्द का ख्याल रखेगा!

+0

क्या आपने GUID को उस JSON सरणी के रूप में पारित करने का प्रयास किया है? –

+0

आईएमओ यह एक [ब्राउज़र चीज] हो सकता है (http://bytes.com/topic/javascript/answers/92088-max-allowed- लम्बाई- जावास्क्रिप्ट- स्ट्रिंग)। –

+0

जब अनुरोध सफल हुआ, तो फिडलर में http अनुरोध/उत्तर का वास्तविक आकार क्या था? –

उत्तर

2

वास्तविक सीमा 8192 बाइट्स प्रतीत होती है।

आप system.serviceModel टैग में अपने Web.config जाँच करने के लिए है:

<system.serviceModel> 
    <bindings> 
    <basicHttpBinding> 
    <binding name="Service1Soap" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
     allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
     messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> 
    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/> 
    <security mode="None"> 
     <transport clientCredentialType="None" proxyCredentialType="None" realm=""/> 
     <message clientCredentialType="UserName" algorithmSuite="Default"/> 
    </security> 
    </binding> 
    </basicHttpBinding> 
    </bindings> 

आप एक अधिक से अधिक मूल्य के लिए maxStringContentLength = "8192" बदलने की जरूरत है।

आप प्रत्येक अनुरोध में ऑफ़सेट पैरामीटर का उपयोग करके पृष्ठ द्वारा GUID पृष्ठ की सूची प्राप्त करने के बजाय एक से अधिक अनुरोध भी कर सकते हैं। उदाहरण के लिए, 200 के पृष्ठों द्वारा GUID की सूची प्राप्त करने के लिए, ऑफ़सेट = 0 के साथ पहला अनुरोध, ऑफसेट = 200 के साथ दूसरा, ... जब तक आपको 200 से कम आइटम नहीं मिलते।

1

मुझे पता है कि यह आपके लिए बहुत मदद नहीं करेगा लेकिन मैं यह इंगित करना चाहता हूं कि JSON spec कोई सीमा निर्धारित नहीं करता है; तथापि, यह पारसर्स ऐसा करने के लिए अनुमति देता है:

कार्यान्वयन ग्रंथों है कि यह
स्वीकार करता है के आकार पर सीमा निर्धारित कर सकते हैं। एक कार्यान्वयन
घोंसले की अधिकतम गहराई पर सीमा निर्धारित कर सकता है। एक कार्यान्वयन संख्याओं की सीमा पर सीमा निर्धारित कर सकता है।
एक कार्यान्वयन तारों की लंबाई और वर्ण सामग्री पर सीमा निर्धारित कर सकता है।

RFC4627: The application/json Media Type for JavaScript Object Notation (JSON)

कर देखें कि कहीं this answer आप के लिए लागू होता है।

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