Я вызываю свой веб-сервис 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-отладочный прокси).
Я добавил это в конфигурацию webservice:
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000" recursionLimit="50000"/>
</webServices>
</scripting>
</system.web.extensions>
Это не имеет никакого значения, запрос все еще терпит неудачу для входного параметра более 8176 байтов.
Этот входной параметр преобразуется в строку со стороны WCF.
Что мне не хватает? Спасибо!
UPDATE, это решило мою проблему: Оказывается, эта настройка управляет общей длиной сообщения 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"/>
Надеюсь, что это позаботится о некоторых головных болях!