Я пытаюсь разработать бизнес-логику для динамического сайта, используя nusoap на стороне сервера (потому что мне нужны wsdls, а расширение PHP SOAP не может генерировать wsdls) и PHP SOAP extenstion на стороне клиента.
Тем не менее, я не могу получить даже логин и функции getRole. Когда я пытаюсь вызвать клиента, я получаю следующее сообщение
Uncaught SoapFault exception: [Client] looks like we got no XML document in [some paths]...
Wsdl существует на стороне сервера, и клиент его читает (когда я помещаю неверный url для wsdl, я получаю сообщение об ошибке).
Может ли кто-нибудь помочь?
Похоже, ваш клиент получает недействительный XML – либо сам WSDL, либо ответ, возвращаемый сервером. Попробуйте вызвать клиент с параметром trace
установленным в TRUE, и проверьте фактический XML-отправление / получение с помощью __getLastRequest()
и __getLastResponse()
.
У меня была аналогичная проблема; Оказывается, мой сервис выводит некоторые отладочные данные. Я удалил все echo
линии, и он работал нормально.
У меня та же проблема, и я решил с этим:
Файл SOAP сервера в php имеет кодировку utf8 с спецификацией, заставляя apache отправлять обратно метку спецификации (3 байта) до ответа xml.
Кодируйте ваш soap-сервер php с помощью значка utf8 WITH OUT BOM.
Игнасио Гутьеррес Торреро
Скорее всего, в конце вашего класса SOAPServer есть пробелы в конце. Пожалуйста, просмотрите следующее сообщение в блоге для получения дополнительной информации: http://arnekroeger.blogspot.com/2011/02/php-soap-error-looks-like-we-got-no-xml.html
В моем случае эта ошибка появилась, когда я включил скрипт с пустыми строками после метки «?>».
Удаление этих строк решает проблему
Не забудьте использовать блок try / catch:
try { var_dump($client->foo()); } catch (Exception $e) { echo($client->__getLastResponse()); echo PHP_EOL; echo($client->__getLastRequest()); }
Просто используйте trim () для вас args.
$objectRequette = trim($_POST['Requette']) ; $client = new SoapClient(null, array( 'location' => 'http://your.php', 'uri'=>'your option', )); $result = $client->__soapCall('Misyka', array("$objectRequettea"));
Несколько раз спецификация может генерировать дополнительные символы, которые создают этот тип проблемы.
Чтобы определить, есть ли какая-либо спецификация UTF, см. Эту ссылку .
У меня always_populate_raw_post_data
же проблема.my проблема решена set always_populate_raw_post_data
до -1
на php.ini.
Я узнаю это, добавив «trace» => 1, «exceptions» => 1 в опции и использую try catch
и получить __getLastRequest()
и __getLastResponse()
Ниже может быть проблема для некоторых пользователей. потому что я прошел через это.
Для последней версии nuSoap ниже будет решена ваша проблема:
НАЙТИ код ниже в nusoap.php
$this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]");
в строке 6132 или что-то вокруг этого нет.
И КОММЕНТАРИЙ
// $this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]");
Так как это просто для отладки. поэтому не стоит беспокоиться о каких-либо проблемах с функциональностью.
У меня есть способ решить эту проблему. Это не очень хорошее решение, но оно работает …
Как я не могу сделать никаких изменений в моем богослужебном сервере, я решил сделать это …
Сначала мне нужно заставить замолчать SoapFault:
try { $client = new SoapClient('http://www.mymantisaddress.com/api/soap/mantisconnect.php?wsdl', array('trace'=> 1, 'exceptions' => 0)); $result = $client->__soapCall($function_name, $args); } catch (SoapFault $e) { //$result = array( // 'erro' => $e->faultstring //); }
Во-вторых, я заметил, что в начале моей строки был три трейловых элемента управления, поэтому я удалил его:
$str = substr($client->__getLastResponse(), 3) . "pe>"; print $str;
В-третьих, я должен положить «pe>» в конце моей строки, потому что он был неполным.