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

StackOverflow https://stackoverflow.com/questions/231358

  •  04-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Относительно 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 и никогда не использовал пакет 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)

Это время, когда каждый сценарий может анализировать ввод. Если время до завершения синтаксического анализа истекло, сценарий даже не запустится.

Заметка: если возможно, я предлагаю перейти на классы PHP расширения SoapClient / SoapServer. NuSoap показал себя не очень надежным в условиях большой нагрузки, особенно когда дело доходит до кеша. Иногда мы видели, как NuSoap просто «забыл» определения wsdl и работа в режиме none-wsdl. Weird ...

Вы не сказали, отправляете или получаете сообщения SOAP. Если вы отправляете, я бы проверил, чтобы NuSOAP отправлял через POST, а не GET (вам, вероятно, придется покопаться в коде, чтобы увидеть; я обнаружил, что документация редкая). Если вы получаете, проверьте настройки PHP.INI для таких вещей, как память и размер данных. На самом деле, все равно проверьте ограничения памяти - NuSOAP - это проблема с памятью, IIRC.

Я думаю, что размер сообщения будет скорее ограничен пределом памяти PHP, чем каким-либо жестко заданным значением. По крайней мере, я мог бы отправить строку 6,5 МБ без каких-либо проблем. Когда я попытался отправить 8-мегабайтную строку, я обнаружил исключение нехватки памяти внутри nusoap.php (мой сервер имеет ограничение 64 МБ для PHP).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top