Batas ukuran parameter JSON

Saya memanggil layanan Web WCF saya menggunakan jQuery $.ajax json POST.

Salah satu parameter masukan sangat panjang - lebih dari 8000 byte. Data di dalamnya adalah daftar GUID yang dipisahkan koma, seperti ini "78dace54-1eea-4b31-8a43-dcd01e172d14,ce485e64-e7c6-481c-a424-2624371180aa,ede4c606-f743-4e0a-a8cc-59bcffa7feda, f0a81ed1-80db- 4f6d-92d7-2fc47759a409".

Bila panjang parameter tersebut 8176 byte, permintaan berhasil. Jika 8213 (satu koma dan GUID lagi) - permintaan gagal.

Gagal dari browser dan dari Fiddler (proksi debug HTTP) . Saya menambahkan ini ke konfigurasi layanan web:

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

Itu tidak ada bedanya, permintaan masih gagal untuk parameter input yang panjangnya lebih dari 8176 byte.
Param input tersebut dipetakan ke dalam sebuah String di sisi WCF.
Apa yang saya lewatkan? Terima kasih!

UPDATE, ini menyelesaikan masalah saya: Ternyata pengaturan ini mengontrol total panjang pesan JSON

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

Ada pengaturan lain yang mengontrol panjang maksimum untuk masing-masing parameter:

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

Juga, pastikan untuk mengatur ini:

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

Semoga ini bisa mengatasi sakit kepala di luar sana!


person Dmitri Mogilevski    schedule 02.02.2012    source sumber
comment
Sudahkah Anda mencoba agar daftar GUID diteruskan sebagai array JSON?   -  person Niet the Dark Absol    schedule 03.02.2012
comment
IMO mungkin itu adalah masalah browser.   -  person Laur Ivan    schedule 03.02.2012
comment
Ketika permintaan berhasil, berapa ukuran sebenarnya dari permintaan/balasan http yang terlihat di Fiddler?   -  person Chansik Im    schedule 03.02.2012
comment
Saya memiliki masalah yang sama, tetapi ketika saya mengukur seluruh keluaran JSON.stringify, saya menemukan batasnya adalah 65536, atau tepatnya 16 bit. Itu bukanlah suatu kebetulan. Baik C# atau JSON.stringify harus memiliki batas yang ditetapkan.   -  person Jacob Raines    schedule 25.07.2013


Jawaban (2)


Batas sebenarnya tampaknya 8192 byte.

Anda harus memeriksa Web.config Anda di tag 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>

Anda perlu mengubah maxStringContentLength="8192" ke nilai yang lebih besar.

Anda juga dapat membuat beberapa permintaan, bukan satu permintaan, untuk mendapatkan daftar GUID halaman demi halaman, menggunakan parameter offset di setiap permintaan. Misalnya, untuk mendapatkan daftar GUID per halaman 200, permintaan pertama dengan offset=0, kedua dengan offset=200, ... hingga Anda mendapatkan kurang dari 200 item.

person LD.    schedule 13.03.2012

Saya tahu ini tidak akan banyak membantu Anda, tetapi saya ingin menunjukkan bahwa spesifikasi JSON tidak menetapkan batasan apa pun; namun, ini memungkinkan parser untuk melakukannya:

Sebuah implementasi mungkin menetapkan batasan pada ukuran teks yang
diterima. Sebuah implementasi mungkin menetapkan batas kedalaman maksimum
sarang. Sebuah implementasi dapat menetapkan batasan pada rentang angka.
Sebuah implementasi dapat menetapkan batasan pada panjang dan isi karakter string.

RFC4627: Jenis Media aplikasi/json untuk Notasi Objek JavaScript (JSON)

Lihat apakah jawaban ini berlaku untuk Anda.

person Álvaro González    schedule 13.03.2012