如何声明返回多个TYPES的PHP函数的WSDL?

时间:2009-09-21 15:07:43

标签: php web-services wsdl nusoap

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

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

$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的松散打字让我对返回类型使用了一个糟糕的设计,我需要使用别的东西?

欢迎任何建议。

3 个答案:

答案 0 :(得分:1)

可以使用xsd:anytype。实际上我不推荐它,因为基于类型的环境如.NET和Java将无法处理你的wsdl。

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

答案 1 :(得分:0)

您应该始终返回相同的结构。在发生故障的情况下,您应该像使用SOAP故障一样使用异常,就像在正常使用中一样: http://www.ibm.com/developerworks/webservices/library/ws-tip-jaxrpc.html

答案 2 :(得分:0)

您可以返回

  • 第一个元素:错误代码,0 =错误,1 =好
  • 第二个元素:错误消息,如果我们很好则为空
  • 第三个要素:你的复杂类型,如果我们是坏的,那就是空的。