





Я лишь поверхностно знаком с PHP и никогда не использовал пакет NuSOAP. Однако размер сообщения SOAP должен ограничиваться только транспортной средой. В случае HTTP он должен быть в значительной степени неограниченным (ограничение в 16384 байта в запросах POST формы не связано с SOAP, это связано с ограничениями браузера (которые на самом деле могут больше не существовать, но я не знаю наверняка) ).
Я бы порекомендовал найти контактный адрес для авторов / сопровождающих NuSOAP и спросить их напрямую. Если в WSDL нет чего-то (и я не помню ничего в спецификации WSDL, что ограничивало бы весь размер тела сообщения ... отдельные параметры (через фасеты схемы XML), но не все тело), тогда ограничение Казалось бы, есть в наборе инструментов.
В производственном ящике мы используем встроенные Soap-функции PHP 5.2.5 в качестве сервера и NuSoap на PHP 4 и успешно передали сообщения размером более 1 МБ.
Я не думаю, что в каком-либо продукте есть ограничения, но вы должны проверить свои настройки в php.ini для
max_input_time (defaults to 60)
Это время, когда каждому сценарию разрешается анализировать ввод. Если время истекло до завершения синтаксического анализа, сценарий даже не запустится.
Примечание: если возможно, я предлагаю перейти на классы расширения SoapClient / SoapServer PHP. NuSoap зарекомендовал себя не очень надежно в ситуациях с большой нагрузкой, особенно когда речь идет о кеш-памяти. Иногда мы видели, как NuSoap просто «забывает» определения wsdl и работает в режиме none-wsdl. Странный...
Вы не сказали, отправляете ли вы или получаете сообщения SOAP. Если вы отправляете, я бы проверял, отправляет ли NuSOAP через POST, а не GET (вам, вероятно, придется покопаться в коде, чтобы увидеть; я нашел документацию скудной). Если вы получаете, проверьте в настройках PHP.INI такие вещи, как память и размер данных. На самом деле, в любом случае проверьте свои ограничения памяти - NuSOAP - это довольно много памяти, IIRC.
Что касается FUD о «ограничении в 1000 байт» ... Я просмотрел исходный код nusoap_client и обнаружил, что ограничение действует только для вывод отладки.
Это означает, что все данные обрабатываются и передаются в веб-сервис (независимо от его размера), но в журнале отладки отображаются только первые 1000 байт (или, точнее, символы).
Вот код:
$this->debug('SOAP message length=' . strlen($soapmsg) . ' contents (max 1000 bytes)=' . substr($soapmsg, 0, 1000));
// send
$return = $this->send($this->getHTTPBody($soapmsg),$soapAction,$this->timeout,$this->response_timeout);
Как вы можете ясно видеть, вызов getHTTPBody() использует весь $soapmsg, и только вывод отладки ограничен первыми 1000 символами. Если вы хотите изменить это, просто измените вызов substr() в соответствии с вашими потребностями или просто замените его на $soapmsg (так что все будет отображаться и в выводе отладки).
Это не должно иметь ничего общего с каким-либо реальным ограничением фактически отправленных данных. Конечно, могут быть и другие факторы, фактически ограничивающие размер того, что вы можете отправить (например, ограничение ОЗУ, установленное для вашего PHP-скрипта, ограничения вашей реализации HTTP или нехватка доступной виртуальной памяти), но примите это как должное. такая вещь, как «ограничение в 1000 байт» для данных, которые вы можете отправить с помощью NuSOAP.
Я думаю, что размер сообщения будет ограничен скорее лимитом памяти PHP, чем каким-то жестко запрограммированным значением. По крайней мере, я мог без проблем отправить строку размером 6,5 МБ. Когда я попытался отправить строку размером 8 МБ, у меня возникло исключение нехватки памяти внутри nusoap.php (у моего сервера ограничение на 64 МБ для PHP).