Как определяется максимальный размер сообщения SOAP?

Я использую NuSOAP на PHP 5.2.6 и вижу, что максимальный размер сообщения составляет всего 1000 байт (что затрудняет выполнение чего-либо значимого). Это установлено в WSDL конечной точки или это то, что я могу настроить в NuSOAP?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
0
15 966
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Я лишь поверхностно знаком с 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).

Другие вопросы по теме