PHP SOAP的奇怪问题(私有变量不持久+从客户端传递的变量不工作)

时间:2010-06-13 09:31:11

标签: php soap

我在PHP Soap实现中遇到了一个非常奇怪的问题。

1)我在Server类中有一个私有变量,它包含DB名称以供进一步参考。私有变量名称是“fromdb”。我在soap服务器上有一个公共函数,我可以设置这个变量。 $客户端 - > 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>

你能看到类型标签之间的数组字吗?似乎客户端只传递了引用或类似的内容。所以我完全错过了:(

1 个答案:

答案 0 :(得分:1)

似乎SOAP扩展期望一个字符串,但你给它一个数组。然后它尝试将数组转换为字符串,从而产生“数组”。我没有时间立即检查你写的$client->sendXml( $tarray );扩展名,但是请尝试使用:

$client->__soapCall("sendXml", $tarray);