2009-09-21 70 views
1

我在写PHP Web服务和一个函数。我想在PHP中设置一个Web服务。我需要为这个Web服务生成WSDL描述,因此可以从Ie访问它。视觉工作室。它将文档/搜索字符串作为输入并推荐与输出类似的文档。我返回一个带有第一个元素resultCode(int)的数组,该数组显示操作是成功(1)还是失败(0)。然而,第二个元素可能是一个错误消息(字符串),它告诉用户哪里出错了,或者是一个复杂的返回类型,如具有不同匹配项目的子元素的数组,例如 array(array(“heading”=> “article heading”,“articleId”=> 12345,“text”=>“文章正文”),array(...),...)。我需要知道如何为该返回类型生成/写入WSDL,或者如何在NuSOAP中执行该操作。你会怎么做?如何声明返回多个TYPES的PHP函数的WSDL?

这是我目前用来设置服务的一些代码。

$server->wsdl->addComplexType(
'returnStructBase', 
'complexType', 
'struct', 
'all', 
'', 
array('resultCode' => array('name'=>'resultCode', 'type'=>'xsd:int'), 
     'resultData' => array('name'=>'resultData', 'type'=>'xsd:anyType') 
    ) 
); 
$server->wsdl->addComplexType(
'returnStructArray', 
'complexType', 
'array', 
'', 
'SOAP-ENC:Array', 
array(), 
array(
    array('ref' => 'SOAP-ENC:arrayType', 
      'wsdl:arrayType' => 'tns:returnStructBase[]' 
     )    
    ), 
'tns:returnStructArray' 
); 

$server->register("GetRecommendations", array('username'=>'xsd:string', 'password'=>'xsd:string','articleId'=>'xsd:string', 
       'text'=>'xsd:string', 'returnText'=>'xsd:boolean'), array('return'=>'tns:returnStructArray'), $namespace, $namespace . '#getRecommendations', 'rpc', 'encoded', ' ... '); 

也许PHP的松散打字让我对返回类型使用了糟糕的设计,我需要使用别的东西?

欢迎任何建议。

回答

0

您可以返回

  • 第一个元素:错误代码,0 =不良,1 =好
  • 第二个元素:错误消息,如果我们是好的,则为空
  • 第三个元素:您的复杂类型,如果我们不好,则为空。
1

可能使用xsd:anytype。事实上,我不会推荐它,因为基于类型的环境(如.NET和Java)将无法处理您的wsdl。

为了得到一个干净的解决方案我会重新考虑设计的PHP诱惑你...;)