2012-05-09 46 views
3

以下是這個緊迫的問題,經過幾天的工作後仍未解決。PHP SOAP服務器根本不返回值

http://www.tabernus.com/ws/soap/server.php?WSDL應該給你WSDL文件。

在server.php中,我想在調用「GetAuditInformation」方法時返回遞增的序列號。

所以我在寫上面這個簡單的功能:

<?php 
function GetAuditInformation($serialNumber) { 
$serialNumber=$serialNumber +1; 
return $serialNumber;   
} 

ini_set("soap.wsdl_cache_enabled", "0"); 
$server = new SoapServer('wsMRMAudit.wsdl'); 
$server->addFunction("GetAuditInformation"); 
$server->handle(); 

?> 

我測試使用plumvoice SOAPtester,它是能夠通過WSDL得到方法。

http://www.plumvoice.com/soaptester/

但輸入序列號說.... 1000,它應該回到1001,但它返回NULL。這是爲什麼?

回答

3

傳遞給函數的參數不是數字,而是一個對象。你的函數定義應該是這樣的:

function GetAuditInformation($x) 
{ 
    return array('GetAuditInformationResult' => $x->SerialNumber + 1); 
} 

有關完整的示例,讓我後我的測試腳本,以及,其中工程BTW:

$s = new SoapClient('http://www.tabernus.com/ws/soap/server.php?WSDL', array('trace'=>true)); 

var_dump($s->GetAuditInformation(array('SerialNumber' => 1000))); 

$req = $s->__getLastRequest(); 

function GetAuditInformation($x) 
{ 
return array('GetAuditInformationResult' => $x->SerialNumber + 1); 
} 

$server = new SoapServer('http://www.tabernus.com/ws/soap/server.php?WSDL', array(
    'actor' => 'http://www.tabernus.com/ws/soap/', 
    'soap_version' => SOAP_1_2 
)); 
$server->addFunction('GetAuditInformation'); 

$server->handle($req); 
+0

接近......我只得到了「對象」裏面的「GetAuditInformationResult」 - 爲什麼「對象?」它應該返回遞增的序列號。謝謝! – netrox

+0

發現你的問題,更新了答案。 –

+0

越來越接近......它確實返回了數字,但它並沒有從客戶那裏獲得價值......就像客戶發送給我們1一樣,我應該返回2,但顯然它仍然設置爲1,因爲它沒有獲得價值來自客戶端。 – netrox