ขีดจำกัดขนาดพารามิเตอร์ JSON

ฉันกำลังเรียกบริการเว็บ WCF ของฉันโดยใช้ jQuery $.ajax json POST

หนึ่งในพารามิเตอร์อินพุตยาวมาก - มากกว่า 8000 ไบต์ ข้อมูลในนั้นเป็นรายการ GUID ที่คั่นด้วยเครื่องหมายจุลภาค เช่น "78dace54-1eea-4b31-8a43-dcd01e172d14,ce485e64-e7c6-481c-a424-2624371180aa,ede4c606-f743-4e0a-a8cc-59bcffa7feda ,f0a81ed1-80db- 4f6d-92d7-2fc47759a409".

เมื่อพารามิเตอร์นั้นยาว 8176 ไบต์ คำขอจะสำเร็จ เมื่อเป็น 8213 (อีกหนึ่งลูกน้ำและ GUID) - คำขอล้มเหลว

ล้มเหลวจากเบราว์เซอร์และจาก Fiddler (พร็อกซีการดีบัก HTTP) . ฉันเพิ่มสิ่งนี้ลงในการกำหนดค่าบริการเว็บ:

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

นั่นไม่ได้สร้างความแตกต่างใด ๆ คำขอยังคงล้มเหลวสำหรับพารามิเตอร์อินพุตที่มีความยาวเกิน 8176 ไบต์
พารามิเตอร์อินพุตนั้นแมปลงใน String ที่ฝั่ง WCF
ฉันพลาดอะไรไป? ขอบคุณ!

อัปเดต นี่เป็นการแก้ปัญหาของฉัน: ปรากฎว่าการตั้งค่านี้ควบคุมความยาวข้อความ 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"/>

หวังว่านี่จะช่วยบรรเทาอาการปวดหัวได้บ้าง!


person Dmitri Mogilevski    schedule 02.02.2012    source แหล่งที่มา
comment
คุณได้ลองให้รายการ GUID นั้นถูกส่งผ่านเป็นอาร์เรย์ JSON หรือไม่?   -  person Niet the Dark Absol    schedule 03.02.2012
comment
IMO อาจเป็นสิ่งที่เบราว์เซอร์   -  person Laur Ivan    schedule 03.02.2012
comment
เมื่อคำขอสำเร็จ ขนาดที่แท้จริงของคำขอ/การตอบกลับ http ที่เห็นใน Fiddler คือเท่าใด   -  person Chansik Im    schedule 03.02.2012
comment
ฉันมีปัญหาเดียวกัน แต่เมื่อฉันวัดเอาต์พุต JSON.stringify ทั้งหมด ฉันพบว่าขีดจำกัดอยู่ที่ 65536 หรือ 16 บิตพอดี นั่นไม่ใช่เรื่องบังเอิญ C# หรือ JSON.stringify ต้องมีการตั้งค่าขีดจำกัด   -  person Jacob Raines    schedule 25.07.2013


คำตอบ (2)


ขีดจำกัดที่แท้จริงน่าจะเป็น 8192 ไบต์

คุณต้องตรวจสอบ Web.config ของคุณในแท็ก system.serviceModel :

 <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 ทีละหน้า โดยใช้พารามิเตอร์ออฟเซ็ตในแต่ละคำขอ ตัวอย่างเช่น หากต้องการรับรายการ GUID ตามหน้า 200 อันดับแรกขอด้วย offset=0 ลำดับที่สองด้วย offset=200 ... จนกว่าคุณจะได้รับน้อยกว่า 200 รายการ

person LD.    schedule 13.03.2012

ฉันรู้ว่ามันจะไม่ช่วยอะไรคุณมากนัก แต่ฉันอยากจะชี้ให้เห็นว่าข้อมูลจำเพาะ JSON ไม่ได้กำหนดขีดจำกัดใดๆ อย่างไรก็ตาม อนุญาตให้ parsers ทำเช่นนั้นได้:

การใช้งานอาจกำหนดขีดจำกัดขนาดของข้อความที่
ยอมรับ การใช้งานอาจกำหนดขีดจำกัดความลึกสูงสุดของ
การซ้อน การใช้งานอาจกำหนดขีดจำกัดของช่วงตัวเลข
การใช้งานอาจกำหนดขีดจำกัดความยาวและเนื้อหาอักขระของสตริง

RFC4627: ประเภทสื่อ application/json สำหรับสัญลักษณ์วัตถุ JavaScript (JSON)

ดูว่าคำตอบนี้ใช้ได้กับคุณหรือไม่

person Álvaro González    schedule 13.03.2012