2008-10-23 4 views
3

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

ответ

6

Относительно FUD о «пределе 1000 байтов» ... Я искал исходный код nusoap_client и обнаружил, что предел действует только для вывода отладки .

Это означает, что все данные обрабатываются и передаются в webservice (независимо от его размера), но в журнале отладки отображаются только первые 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 (так что все также отображается на выходе отладки).

Это не должно иметь абсолютно никакого отношения к какому-либо реальному пределу на фактически отправленные данные. Разумеется, могут быть и другие факторы, фактически ограничивающие размер того, что вы можете отправить (например,ограничение RAM, установленное для вашего скрипта PHP, ограничения вашей реализации HTTP или нехватка доступной виртуальной памяти), но считать само собой разумеющимся, нет никакой вещи, как «ограничение 1000 байт» для данных, которые вы можете отправить с помощью NuSOAP.

2

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

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

2

В производственной коробке мы используем встроенные мыльные функции PHP 5.2.5 как сервер и NuSoap на PHP 4 и успешно передали сообщения размером более 1 МБ.

Я не думаю, что существует ограничение в любом продукте, но вы должны проверить настройки в php.ini для

max_input_time  (defaults to 60) 

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

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

1

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

0

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

Смежные вопросы