Как определяется максимальный размер сообщения SOAP? - PullRequest
3 голосов
/ 24 октября 2008

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

Ответы [ 5 ]

6 голосов
/ 13 октября 2010

Относительно 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.

2 голосов
/ 24 октября 2008

В производственной версии мы используем встроенные функции 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. Weird ...

2 голосов
/ 24 октября 2008

Я только немного знаком с PHP и никогда не использовал пакет NuSOAP вообще. Однако размер сообщения SOAP должен быть ограничен только транспортной средой. В случае HTTP он должен быть практически неограниченным (ограничение в 16384 байта в форме запросов POST не связано с SOAP, а связано с ограничениями браузера (которых на самом деле больше не существует, но я точно не знаю) ).

Я бы порекомендовал найти контактный адрес для авторов / сопровождающих NuSOAP и задать их напрямую. Если в WSDL нет чего-то (и я не помню ничего в спецификации WSDL, которое бы ограничивало весь размер тела сообщения ... отдельными параметрами (через фасеты XML-схемы), но не общим телом), тогда это ограничение Казалось бы, в наборе инструментов.

1 голос
/ 03 ноября 2008

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

0 голосов
/ 28 марта 2013

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

...