2012-12-21 78 views
0

我有一個使用NuSOAP的webService。現在,我必須在返回請求的數據之前進行驗證。如果一切正常,我會正常返回它,否則我想返回一條String消息來解釋爲什麼我不提供所需的信息。問題是我無法添加兩種不同類型的返回到NuSOAP的RegisterFunction。如果我添加一個ComplexType作爲返回,我不能返回一個字符串。用NuSOAP返回兩種類型

+0

您似乎忘記提問了。你有什麼嘗試?什麼都沒有奏效?你已經做了什麼研究來解決這個問題? – Charles

回答

2

該函數不能有兩個返回值。您應該將錯誤消息字符串添加到複雜類型中。如果你不想觸摸你的複雜類型,那麼你應該創建另一個包含你的數據類型和字符串的複雜類型 。

示例 - 複合型,你現在所擁有的:

$server->wsdl->addComplexType('myData','complexType','struct','all','', 
    array( 'important' => array('name' => 'important','type' => 'xsd:string'), 
      'stuff'  => array('name' => 'stuff','type' => 'xsd:string') 
    ) 
); 

額外的複雜類型:

$server->wsdl->addComplexType('package','complexType','struct','all','', 
    array( 'data'  => array('name' => 'data','type' => 'tns:myData'), 
      'errormsg' => array('name' => 'errormsg','type' => 'xsd:string') 
    ) 
); 

功能的登記:

$server->register(
       'getData',  
       array('validation'=>'xsd:string'), 
       array('return'=>'tns:package'), 
       $namespace, 
       false, 
       'rpc', 
       'encoded', 
       'description' 
); 

功能:

function GetData($validation) 
{ 
    if($validation == "thegoodguy") { 
     $result['data'] = array(
      "important" => "a top secret information", 
      "stuff"  => "another one" 
     ); 
     $result['errormsg'] = null; 
    } else { 
     $result['data'] = null; 
     $result['errormsg'] = "permission denied!"; 
    } 
    return $result; 
} 

這樣客戶端可以嘗試分析接收到的數據,如果它爲空,那麼他會顯示錯誤消息。

0

您首先需要定義一個新類型,描述像這樣的字符串數組:

$server->wsdl->addComplexType(
    'ArrayOfString', 
    'complexType', 
    'array', 
    'sequence', 
    '', 
    array(
    'itemName' => array(
     'name' => 'itemName', 
     'type' => 'xsd:string', 
     'minOccurs' => '0', 
     'maxOccurs' => 'unbounded' 
    ) 
) 
); 

然後你可以使用TNS:ArrayOfString作爲返回類型。

+0

這不是我想要返回的。我想返回一個odel的數組,我已經有了它的ComplexType,但是我也想要返回一個單一的字符串,如果無論如何我無法返回預期的ComplexType。這就像我想要在單個函數中返回兩種類型。 1成功(ComplexType),另一個失敗(消息) –