Странные проблемы с PHP SOAP (приватная переменная не сохраняется + переменные, переданные от клиента, не работают) - PullRequest
1 голос
/ 13 июня 2010

У меня очень странные проблемы в реализации PHP Soap.

1) У меня есть частная переменная в классе Server, которая содержит имя БД для дальнейшего использования.Имя закрытой переменной - fromdb.У меня есть публичная функция на мыльном сервере, где я могу установить эту переменную.$ Client-> setFromdb.Когда я вызываю его из формы, мой клиент работает отлично, и можно установить частную переменную fromdb.Но при втором вызове мыльного клиента эта закрытая переменная теряет свое значение ... Вот моя настройка сервера мыла:

ini_set('soap.wsdl_cache_enabled', 0);
ini_set('session.auto_start', 0); 
ini_set('always_populate_raw_post_data', 1);

global $config_dir;

session_start();

/*if(!$HTTP_RAW_POST_DATA){
    $HTTP_RAW_POST_DATA = file_get_contents('php://input');
  }*/

$server = new SoapServer("{$config_dir['template']}import.wsdl");  
$server->setClass('import');
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
$server->handle();

2) Проблема в том, что я передал это на сервер:

$client = new SoapClient('http://import.ingatlan.net/wsdl', array('trace' => 1));
$xml='<?xml version="1.0" encoding="UTF-8"?>';
$xml.='<xml>';
$xml.='<referens>';
$xml.='<original_id><![CDATA[DH-2]]></original_id>';
$xml.='<name>Valaki</name>';
$xml.='<email><![CDATA[valaki@example.com]]></email>';
$xml.='<phone><![CDATA[06-30/111-2222]]></phone>';
$xml.='</referens>';
$xml.='</xml>';


$tarray = array("type" => 1, "xml" => $xml);
try {
    $s = $client->sendXml( $tarray );
    print "$s<br>";
}
catch(SOAPFault $exception) { 

    print "<br>--- SOAP exception :<br>{$exception}<br>---<br>";

    print "<br>LAST REQUEST :<br>";
    var_dump($client->__getLastRequest());
    print "<br>---<br>";
    print "<br>LAST RESPONSE :<br>".$client->__getLastResponse();

}

Итак, передал массив данных на сервер.Затем я получил это исключение: ПОСЛЕДНЯЯ ЗАПРОС:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><type>Array</type><xml/></SOAP-ENV:Body></SOAP-ENV:Envelope>

Вы видите слово Array между тегом type?Кажется, что клиент только передал ссылку или что-то вроде этого.Так что я совсем пропустил: (

1 Ответ

1 голос
/ 13 июня 2010

Кажется, расширение SOAP ожидает строку, но вы предоставляете ей массив. Затем он пытается преобразовать массив в строку, что приводит к «массиву». У меня нет времени, чтобы проверить, какое расширение вы пишете $client->sendXml( $tarray );, но попробуйте использовать вместо:

$client->__soapCall("sendXml", $tarray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...