SOAP返回数组dataType的替代方法

时间:2013-10-24 18:23:53

标签: web-services visual-studio-2012 soap yii zend-framework2

经过4天的测试并在Stack Overflow中询问:Importing Yii Created Soap Server To Visual Studio这就是结果:

问:为什么我的Yii soap服务器无法在visual studio中导入? A: Yii对WSDL使用RPC编码样式,而visual studio需要document / literal。因此,您可以使用Zend Framework库来创建文档/文字编码的Web服务器。

新问题:经过数小时的测试后,我发现在函数中返回一个数组会产生一个错误,Visual Studio无法导入它。
SOAP返回数组数据是否有替代类型,因此visual studio可以导入服务器的WSDL吗?

此外,我无法实现在Yii 中实现文档/文字Zend Framework创建的soap服务器的实际示例,因此我编写了我编写的内容,也许其他人可以参考:

  

./保护/组件/ soapTTS.php

<?php

class soapTTS {

    /**
     * @param int $CourseId
     * @return array
     */
    public function ListAllStudentsOnASelectiveCourse($CourseId) {
        $out = helper::ListAllStudentsOnASelectiveCourse($CourseId);
        return $out;
    }


}

?>
上面的

* @return array会导致问题。

  

./保护/控制器/ SoapController.php

<?php
class SoapController extends Controller {
    public function actionService() {
        Yii::import('application.vendors.*');
        Yii::setPathOfAlias('Zend', Yii::getPathOfAlias('application.vendors.Zend'));
        if (isset($_GET['wsdl'])) {
            $autodiscover = new Zend\Soap\AutoDiscover(new \Zend\Soap\Wsdl\ComplexTypeStrategy\ArrayOfTypeSequence());
            $autodiscover->setBindingStyle(array('style' => 'document'));
            $autodiscover->setOperationBodyStyle(array('use' => 'literal'));
            $autodiscover->setClass('soapTTS');
            $autodiscover->setUri('http://localhost/millms/mws/soap/service');
            header("Content-type: text/xml");
            echo $autodiscover->toXML();
        } else {
            // pointing to the current file here
            $soap = new Zend\Soap\Server("http://localhost/millms/mws/soap/service?wsdl");
            $soap->setObject(new Zend\Soap\Server\DocumentLiteralWrapper(new soapTTS()));
            $soap->handle();
        }
    }

}
?>

1 个答案:

答案 0 :(得分:0)

我无法准确解决问题,所以我将所有数组输出作为字符串返回,并将主题转换为JSON响应。因此,在visual studio中导入过程是可以的,并且响应也是正确的。