我在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>
你能看到类型标签之间的数组字吗?似乎客户端只传递了引用或类似的内容。所以我完全错过了:(
答案 0 :(得分:1)
似乎SOAP扩展期望一个字符串,但你给它一个数组。然后它尝试将数组转换为字符串,从而产生“数组”。我没有时间立即检查你写的$client->sendXml( $tarray );
扩展名,但是请尝试使用:
$client->__soapCall("sendXml", $tarray);